Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm "ñ" nhưng tránh bản ghi chứa "n" trong MySQL?

Tìm kiếm chính xác ký tự 'ñ' không trùng với 'n' trong MySQL

Sử dụng COLLATE utf8_spanish_ci để phân biệt 'ñ' và 'n' trong điều kiện LIKE, vì collation mặc định thường coi chúng giống nhau.

Cú pháp

SELECT * FROM yourTableName 
WHERE yourColumnName LIKE '%ñ%' COLLATE utf8_spanish_ci;

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE NotIncludenDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ClientName VARCHAR(20)
    -> );

Chèn dữ liệu có 'n' và 'ñ':

mysql> INSERT INTO NotIncludenDemo(ClientName) VALUES 
('John'), ('Johñ'), ('Johnñy');

Dữ liệu:

+----+------------+
| Id | ClientName |
+----+------------+
| 1  | John       |
| 2  | Johñ       |
| 3  | Johnñy     |
+----+------------+

Tìm 'ñ' với collation 스페인:

mysql> SELECT * FROM NotIncludenDemo 
WHERE ClientName LIKE '%ñ%' COLLATE utf8_spanish_ci;

Kết quả (chỉ 2 hàng có 'ñ', loại 'John'):

+----+------------+
| Id | ClientName |
+----+------------+
| 2  | Johñ       |
| 3  | Johnñy     |
+----+------------+

Giải thích

  • utf8_general_ci (mặc định): coi 'n' = 'ñ' = 'ń' → tìm 'ñ' cũng ra 'John'
  • utf8_spanish_ci: phân biệt 'ñ' là ký tự riêng biệt → chính xác
  • utf8_bin: so sánh binary, cũng phân biệt nhưng case-sensitive

Collation liên quan

CollationPhân biệt ñ/nCase sensitive
utf8_general_ciKhôngKhông
utf8_spanish_ciCóKhông
utf8_spanish2_ciCó (chuẩn hiện đại)Không
utf8_binCóCó

Lưu ý

  • Áp dụng COLLATE ở cấp cột (ALTER TABLE) hoặc cấp truy vấn
  • MySQL 8.0+: khuyến nghị dùng utf8mb4_spanish_ci (hỗ trợ emoji, 4-byte)
  • Index vẫn hoạt động với COLLATE trong WHERE