Skip to main content
Prisma Documentation Docs

Search documentation

Type to search this documentation.

On this pageOverview

Case sensitivity (Prisma ORM v6) (/docs/orm/v6/prisma-client/queries/case-sensitivity)

For the complete Prisma documentation index, see llms.txt. A markdown version of any docs page is available by appending .md to its URL.

How Prisma Client handles case sensitivity when filtering and sorting.

Location: ORM > v6 > Prisma Client > Queries > Case sensitivity

Case sensitivity affects filtering and sorting of data, and is determined by your database collation. Sorting and filtering data yields different results depending on your settings:

Action Case sensitive Case insensitive
Sort ascending Apple, Banana, apple pie, banana pie Apple, apple pie, Banana, banana pie
Match "apple" apple Apple, apple

If you use a relational database connector, Prisma Client respects your database collation. Options and recommendations for supporting case-insensitive filtering and sorting with Prisma Client depend on your database provider.

If you use the MongoDB connector, Prisma Client uses RegEx rules to enable case-insensitive filtering. The connector does not use MongoDB collation.

Note: Follow the progress of case-insensitive sorting on GitHub.

[!NOTE] In the context of Prisma Client, the following section refers to relational database connectors only.

Collation specifies how data is sorted and compared in a database, which includes casing. Collation is something you choose when you set up a database.

The following example demonstrates how to view the collation of a MySQL database:

no-lines
SELECT @@character_set_database, @@collation_database;
no-copy
  +--------------------------+----------------------+
  | @@character_set_database | @@collation_database |
  +--------------------------+----------------------+
  | utf8mb4                  | utf8mb4_0900_ai_ci   |
  +--------------------------+----------------------+

The example collation, utf8mb4_0900_ai_ci, is:

  • Accent-insensitive (ai)
  • Case-insensitive (ci).

This means that prisMa will match prisma, PRISMA, priSMA, and so on:

no-lines
SELECT id, email FROM User WHERE email LIKE "%prisMa%"
no-copy
 +----+-----------------------------------+
 | id | email                             |
 +----+-----------------------------------+
 | 61 | alice@prisma.io                   |
 | 49 | birgitte@prisma.io                |
 +----+-----------------------------------+

The same query with Prisma Client:

TypeScript
const users = await prisma.user.findMany({
  where: {
    email: {
      contains: "prisMa",
    },
  },
  select: {
    id: true,
    name: true,
  },
});

The recommended way to support case-insensitive filtering with Prisma Client depends on your underlying provider.

PostgreSQL uses deterministic collation by default, which means that filtering is case-sensitive. To support case-insensitive filtering, use the mode: 'insensitive' property on a per-field basis.

Use the mode property on a filter as shown:

TypeScript
const users = await prisma.user.findMany({
  where: {
    email: {
      endsWith: "prisma.io",
      mode: "insensitive", // Default value: default
    },
  },
});

See also: Filtering (Case-insensitive filtering)

  • You cannot use case-insensitive filtering with C collation
  • citext columns are always case-insensitive and are not affected by mode

If you rely heavily on case-insensitive filtering, consider creating indexes in the PostgreSQL database to improve performance:

MySQL uses case-insensitive collation by default. Therefore, filtering with Prisma Client and MySQL is case-insensitive by default.

mode: 'insensitive' property is not required and therefore not available in the generated Prisma Client API.

  • You must use a case-insensitive (_ci) collation in order to support case-insensitive filtering. Prisma Client does no support the mode filter property for the MySQL provider.

To support case-insensitive filtering, use the mode: 'insensitive' property on a per-field basis:

TypeScript
const users = await prisma.user.findMany({
  where: {
    email: {
      endsWith: "prisma.io",
      mode: "insensitive", // Default value: default
    },
  },
});

The MongoDB uses a RegEx rule for case-insensitive filtering.

By default, text fields created by Prisma Client in SQLite databases do not support case-insensitive filtering. In SQLite, only case-insensitive comparisons of ASCII characters are possible.

To enable limited support (ASCII only) for case-insensitive filtering on a per-column basis, you will need to add COLLATE NOCASE when you define a text column.

Adding case-insensitive filtering to a new column.

Section titled “Adding case-insensitive filtering to a new column.”

To add case-insensitive filtering to a new column, you will need to modify the migration file that is created by Prisma Client.

Taking the following Prisma Schema model:

prisma
model User {
  id    Int    @id
  email String
}

and using prisma migrate dev --create-only to create the following migration file:

SQL
-- CreateTable
CREATE TABLE "User" (
    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "email" TEXT NOT NULL
);

You would need to add COLLATE NOCASE to the email column in order to make case-insensitive filtering possible:

SQL
-- CreateTableCREATE TABLE "User" (    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,    "email" TEXT NOT NULL COLLATE NOCASE);

Adding case-insensitive filtering to an existing column.

Section titled “Adding case-insensitive filtering to an existing column.”

Since columns cannot be updated in SQLite, COLLATE NOCASE can only be added to an existing column by creating a blank migration file and migrating data to a new table.

Taking the following Prisma Schema model:

prisma
model User {
  id    Int    @id
  email String
}

and using prisma migrate dev --create-only to create an empty migration file, you will need to rename the current User table and create a new User table with COLLATE NOCASE.

SQL
-- UpdateTable
ALTER TABLE "User" RENAME TO "User_old";

CREATE TABLE "User" (
    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "email" TEXT NOT NULL COLLATE NOCASE
);

INSERT INTO "User" (id, email)
SELECT id, email FROM "User_old";

DROP TABLE "User_old";

Microsoft SQL Server uses case-insensitive collation by default. Therefore, filtering with Prisma Client and Microsoft SQL Server is case-insensitive by default.

mode: 'insensitive' property is not required and therefore not available in the generated Prisma Client API.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu