Độ 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 | +--------------------------+----------------------+
7Nế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ườngTrong 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ườngCá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 PostgreSQLPostgreSQL 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ườngSử 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. Hiệu suấtNế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 MySQLMySQL 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ạoHã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ườngconst 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 SQLiteTheo 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 SQLMicrosoft 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.
|