Mệnh đề where phân biệt chữ hoa chữ thường của MySQL

Độ phân biệt chữ hoa chữ thường ảnh hưởng đến quá trình lọc và sắp xếp dữ liệu và được xác định bởi. Sắp xếp và lọc dữ liệu mang lại các kết quả khác nhau tùy thuộc vào cài đặt của bạn

Trường hợp nhạy cảm Trường hợp nhạy cảm Trường hợp không nhạy cảmSắp xếp tăng dầnApple, Banana,

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

0,

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

1Apple,

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

0, Banana,

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

1Trận đấu

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

6

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

7Apple,

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

7

Nếu bạn sử dụng trình kết nối cơ sở dữ liệu quan hệ, Prisma Client sẽ tôn trọng đối chiếu cơ sở dữ liệu của bạn. Các tùy chọn và đề xuất để hỗ trợ lọc và sắp xếp phân biệt chữ hoa chữ thường với Prisma Client tùy thuộc vào

Nếu bạn sử dụng trình kết nối MongoDB, Prisma Client sẽ sử dụng các quy tắc RegEx để bật tính năng lọc phân biệt chữ hoa chữ thường. Trình kết nối không sử dụng đối chiếu MongoDB

Ghi chú. Theo dõi tiến trình sắp xếp phân biệt chữ hoa chữ thường trên GitHub

Đối chiếu cơ sở dữ liệu và phân biệt chữ hoa chữ thường

Trong ngữ cảnh của Prisma Client, phần sau đây chỉ đề cập đến các trình kết nối cơ sở dữ liệu quan hệ

Đối chiếu chỉ định cách dữ liệu được sắp xếp và so sánh trong cơ sở dữ liệu, bao gồm cả cách viết hoa. Đối chiếu là thứ bạn chọn khi thiết lập cơ sở dữ liệu

Ví dụ sau minh họa cách xem đối chiếu cơ sở dữ liệu MySQL

SELECT @@character_set_database, @@collation_database;

Ẩn kết quả CLI

+--------------------------+----------------------+

| @@character_set_database | @@collation_database |

+--------------------------+----------------------+

| utf8mb4 | utf8mb4_0900_ai_ci |

+--------------------------+----------------------+

Đối chiếu ví dụ,

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

0, là

  • Không nhạy cảm với trọng âm (

    SELECT id, email FROM User WHERE email LIKE "%prisMa%"

    1)
  • Không phân biệt chữ hoa chữ thường (

    SELECT id, email FROM User WHERE email LIKE "%prisMa%"

    2)

Điều này có nghĩa là

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

3 sẽ khớp với

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

4,

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

5,

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

6, v.v.

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

Ẩn kết quả CLI

+----+-----------------------------------+

| id | email |

+----+-----------------------------------+

| 61 | [email protected] |

| 49 | [email protected] |

+----+-----------------------------------+

Truy vấn tương tự với Prisma Client

const users = await prisma.user.findMany({

where: {

email: {

contains: 'prisMa',

},

},

select: {

id: true,

name: true,

},

})

Các tùy chọn để lọc phân biệt chữ hoa chữ thường

Cách khuyến nghị để hỗ trợ tính năng lọc phân biệt chữ hoa chữ thường với Prisma Client tùy thuộc vào nhà cung cấp cơ sở của bạn

Nhà cung cấp PostgreSQL

PostgreSQL sử dụng theo mặc định, có nghĩa là lọc phân biệt chữ hoa chữ thường. Để hỗ trợ lọc phân biệt chữ hoa chữ thường, hãy sử dụng thuộc tính

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

7 trên cơ sở từng trường

Sử dụng thuộc tính

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

8 trên bộ lọc như được hiển thị

const users = await prisma.user.findMany({

where: {

email: {

endsWith: 'prisma.io',

mode: 'insensitive', // Default value: default

},

},

})

Xem thêm.

Hãy cẩn thận

  • Bạn không thể sử dụng tính năng lọc phân biệt chữ hoa chữ thường với đối chiếu C
  • Các cột

    SELECT id, email FROM User WHERE email LIKE "%prisMa%"

    9 luôn phân biệt chữ hoa chữ thường và không bị ảnh hưởng bởi

    SELECT id, email FROM User WHERE email LIKE "%prisMa%"

    8

Hiệu suất

Nếu bạn chủ yếu dựa vào tính năng lọc phân biệt chữ hoa chữ thường, hãy xem xét việc tạo các chỉ mục trong cơ sở dữ liệu PostgreSQL để cải thiện hiệu suất

  • Tạo chỉ mục biểu thức cho truy vấn Prisma Client sử dụng

    +----+-----------------------------------+

    | id | email |

    +----+-----------------------------------+

    | 61 | [email protected] |

    | 49 | [email protected] |

    +----+-----------------------------------+

    1 hoặc

    +----+-----------------------------------+

    | id | email |

    +----+-----------------------------------+

    | 61 | [email protected] |

    | 49 | [email protected] |

    +----+-----------------------------------+

    2
  • Sử dụng mô-đun

    +----+-----------------------------------+

    | id | email |

    +----+-----------------------------------+

    | 61 | [email protected] |

    | 49 | [email protected] |

    +----+-----------------------------------+

    3 cho các truy vấn Prisma Client sử dụng

    +----+-----------------------------------+

    | id | email |

    +----+-----------------------------------+

    | 61 | [email protected] |

    | 49 | [email protected] |

    +----+-----------------------------------+

    4,

    +----+-----------------------------------+

    | id | email |

    +----+-----------------------------------+

    | 61 | [email protected] |

    | 49 | [email protected] |

    +----+-----------------------------------+

    5,

    +----+-----------------------------------+

    | id | email |

    +----+-----------------------------------+

    | 61 | [email protected] |

    | 49 | [email protected] |

    +----+-----------------------------------+

    6 (ánh xạ tới_______17_______7 /

    +----+-----------------------------------+

    | id | email |

    +----+-----------------------------------+

    | 61 | [email protected] |

    | 49 | [email protected] |

    +----+-----------------------------------+

    8 trong PostgreSQL)

nhà cung cấp MySQL

MySQL sử dụng đối chiếu phân biệt chữ hoa chữ thường theo mặc định. Do đó, mặc định lọc bằng Prisma Client và MySQL không phân biệt chữ hoa chữ thường

Thuộc tính

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

7 không bắt buộc và do đó không có sẵn trong API ứng dụng khách Prisma đã tạo

Hãy cẩn thận

  • Bạn phải sử dụng đối chiếu phân biệt chữ hoa chữ thường (

    const users = await prisma.user.findMany({

    where: {

    email: {

    contains: 'prisMa',

    },

    },

    select: {

    id: true,

    name: true,

    },

    })

    0) để hỗ trợ lọc phân biệt chữ hoa chữ thường. Prisma Client không hỗ trợ thuộc tính bộ lọc

    SELECT id, email FROM User WHERE email LIKE "%prisMa%"

    8 cho nhà cung cấp MySQL

nhà cung cấp MongoDB

Để hỗ trợ lọc phân biệt chữ hoa chữ thường, hãy sử dụng thuộc tính

SELECT id, email FROM User WHERE email LIKE "%prisMa%"

7 trên cơ sở từng trường

const users = await prisma.user.findMany({

where: {

email: {

endsWith: 'prisma.io',

mode: 'insensitive', // Default value: default

},

},

})

MongoDB sử dụng quy tắc RegEx để lọc phân biệt chữ hoa chữ thường

nhà cung cấp SQLite

Theo mặc định, chỉ bản thân SQLite. Do đó, Prisma Client không hỗ trợ lọc phân biệt chữ hoa chữ thường với SQLite

Để bật hỗ trợ hạn chế (chỉ ASCII) cho lọc phân biệt chữ hoa chữ thường trên cơ sở từng cột, hãy sử dụng ____18_______3 khi bạn xác định các cột trong bảng

CREATE TABLE mytable (

sample TEXT COLLATE NOCASE /* collating sequence NOCASE */

);

Nhà cung cấp máy chủ Microsoft SQL

Microsoft SQL Server sử dụng đối chiếu phân biệt chữ hoa chữ thường theo mặc định. Do đó, lọc bằng Prisma Client và Microsoft SQL Server không phân biệt chữ hoa chữ thường theo mặc định

Trường hợp MySQL WHERE

Theo mặc định, tùy thuộc vào hệ điều hành và phân biệt chữ hoa chữ thường. Điều này có nghĩa là MySQL không phân biệt chữ hoa chữ thường trong Windows và macOS, trong khi nó phân biệt chữ hoa chữ thường trong hầu hết các hệ thống Linux . Tuy nhiên, bạn có thể thay đổi hành vi bằng cách thay đổi đối chiếu.

Trường hợp mệnh đề WHERE của SQL

Các từ khóa SQL (SELECT, FROM, WHERE, v.v. ) phân biệt chữ hoa chữ thường , nhưng chúng thường được viết hoa. Tên bảng và cột phân biệt chữ hoa chữ thường trong một số cài đặt.

Làm thế nào để thiết lập trường hợp

Khi tìm kiếm một phần chuỗi trong MySQL với LIKE, bạn sẽ khớp phân biệt chữ hoa chữ thường theo mặc định*. Nếu bạn muốn đối sánh phân biệt chữ hoa chữ thường, bạn có thể truyền giá trị dưới dạng nhị phân và sau đó thực hiện so sánh từng byte với. so sánh từng ký tự . Điều duy nhất bạn cần thêm vào truy vấn của mình là BINARY.

Làm cách nào để tắt phân biệt chữ hoa chữ thường trong MySQL?

Bạn có thể tắt phân biệt chữ hoa chữ thường của tên bảng trong MySQL bằng cách đặt tham số Lower_case_table_names thành 1 . Cột, chỉ mục, quy trình được lưu trữ, tên sự kiện và bí danh cột không phân biệt chữ hoa chữ thường trên cả hai nền tảng.