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ácutf8_bin: so sánh binary, cũng phân biệt nhưng case-sensitive
Collation liên quan
| Collation | Phân biệt ñ/n | Case sensitive |
|---|---|---|
| utf8_general_ci | Không | Không |
| utf8_spanish_ci | Có | Không |
| utf8_spanish2_ci | Có (chuẩn hiện đại) | Không |
| utf8_bin | Có | 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