Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci menyebabkan tabrakan kunci unik

Anda melewatkan poin tentang CHARACTER SET dan COLLATION . CHARACTER SET adalah kumpulan karakter yang berbeda. COLLATION mengatakan apakah akan memperlakukan karakter sebagai sama -- pikirkan A dan a -- karakter yang berbeda, tetapi diperlakukan untuk ORDER BY dan WHERE = , dll sebagai sama.

mysql> SELECT 'K'='K' COLLATE utf8_unicode_ci;
+-----------------------------------+
| 'K'='K' COLLATE utf8_unicode_ci  |
+-----------------------------------+
|                                 1 |
+-----------------------------------+

Jadi di utf8_unicode_ci (atau utf8mb4_unicode_ci), kedua karakter tersebut dianggap "sama".

"Sama" adalah ujian untuk UNIQUE kunci.

Setel COLLATION untuk kolom apa pun yang masuk akal bagi Anda.

  • utf8mb4_unicode_ci untuk perbandingan 'kehidupan nyata' yang bagus, tampaknya termasuk yang ini. K=k=Ķ=ķ
  • utf8mb4_unicode_ci untuk perbandingan yang lebih sederhana. Khususnya tidak ada kombinasi 2 karakter yang cocok dengan pengkodean 1 karakter. Pelipatan case dan aksen stripping memang terjadi. K=k=Ķ=ķ
  • utf8mb4_bin membabi buta memeriksa bit. Tidak ada case folding, dll. K k Ķ semuanya tidak sama.

utf8mb4_latvian_ci sedikit berbeda:K=k tetapi tidak sama dengan =ķ . Ada susunan khusus lainnya untuk bahasa lain (kebanyakan Eropa Barat).

. Anda disebut "FULLWIDTH LATIN CAPITAL LETTER K", sehingga cukup beralasan jika dibandingkan dengan K Latin .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa DBMS terbaik untuk pekerjaan itu?

  2. String otomatis MySQL ke casting integer di klausa mana?

  3. KIRI GABUNG di ZF2 menggunakan TableGateway

  4. MySQL Menggabungkan Dua ID Tabel untuk Menghasilkan Hasil dari Satu Tabel ke Tabel lainnya

  5. Apakah singleton akan menjadi pola desain yang baik untuk situs microblogging?