Bạn đang thiếu điểm về CHARACTER SET
và COLLATION
. CHARACTER SET
là một tập hợp các nhân vật khác nhau. A COLLATION
cho biết có nên coi các ký tự như nhau hay không - hãy nghĩ A
và a
- các ký tự khác nhau, nhưng được xử lý cho ORDER BY
và WHERE =
, v.v. giống nhau.
mysql> SELECT 'K'='K' COLLATE utf8_unicode_ci;
+-----------------------------------+
| 'K'='K' COLLATE utf8_unicode_ci |
+-----------------------------------+
| 1 |
+-----------------------------------+
Vì vậy, trong utf8_unicode_ci (hoặc utf8mb4_unicode_ci), hai ký tự đó được coi là "bằng nhau".
"Bằng" là bài kiểm tra cho UNIQUE
chìa khóa.
Đặt COLLATION
cho cột này thành bất kỳ điều gì có ý nghĩa đối với bạn.
- utf8mb4_unicode_ci để so sánh tốt 'cuộc sống thực', dường như bao gồm cả cái này. K =k =Ķ =ķ
- utf8mb4_unicode_ci để có những so sánh đơn giản hơn. Đặc biệt không có tổ hợp 2 ký tự nào phù hợp với bảng mã 1 ký tự. Có xảy ra hiện tượng gập vỏ và tước điểm nhấn. K =k =Ķ =ķ
- utf8mb4_bin kiểm tra các bit một cách mù quáng. Không có trường hợp gấp, v.v. K k Ķ ķ đều không bằng nhau.
utf8mb4_latvian_ci hơi khác một chút:K =k nhưng không bằng Ķ =ķ. Có các đối chiếu chuyên dụng khác cho các ngôn ngữ khác (chủ yếu là Tây Âu).
K
của bạn được gọi là "FULLWIDTH LATIN VỐN CHỮ K", vì vậy khá hợp lý khi nó được so sánh ngang bằng với tiếng Latinh K
.