Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci gây ra xung đột khóa duy nhất

Bạn đang thiếu điểm về CHARACTER SETCOLLATION . 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ĩ Aa - các ký tự khác nhau, nhưng được xử lý cho ORDER BYWHERE = , 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).

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 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lệnh SQL RENAME TABLE

  2. Lỗi khi đổi tên một cột trong MySQL

  3. MySQL C ++ Connector:tham chiếu không xác định tới `get_driver_instance '

  4. Tạo bảng với PHP kiểm tra với giá trị trước và giá trị hiện tại (Mảng)

  5. select * vào outfile không hoạt động ngay cả đối với root