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

Migrasi masalah dan pertanyaan MySQL UTF8 ke UTF8MB4

  1. Ada batasan ukuran INDEX. Anda menabrak batas karena utf8mb4 membutuhkan hingga 4 byte per karakter , sedangkan utf8 hanya membutuhkan 3. Sedangkan batas ukuran INDEX dalam byte .

'Solusinya' adalah memutuskan apa yang harus dilakukan tentang indeks yang terlalu besar. (selengkapnya di bawah)

2.

ALTER TABLE t CHANGE col col ...

sama dengan yang lebih logis

ALTER TABLE t MODIFY col ...

Yang pertama memungkinkan Anda untuk mengubah nama kolom, maka dua salinan nama kolom saat Anda tidak perlu mengubah nama.

  1. Kemungkinan besar Anda memiliki VARCHAR(255) yang membutuhkan 767 byte dalam utf8 (3*255+2; "2" adalah ukuran bidang panjang). Setara dengan utf8mb4 4-byte adalah (191) (4*191+2=766; bukan ruang untuk lebih dari 191).

  2. Saya belum melihat artikel tentang itu. Saya menduga bahwa apa yang baru saja saya katakan adalah yang paling perlu dikatakan.

Jadi...

Rencanakan A :Apakah Anda memiliki foo VARCHAR(255) dan itu utf8? Apakah data di dalamnya selalu (sekarang dan di masa mendatang) lebih pendek dari 191 karakter? Jika demikian, maka lakukan saja ALTER.

Rencana B :Jika Anda membutuhkan lebih dari 191, apakah Anda benar-benar membutuhkan INDEX? DROP INDEX dapat menjadi alternatif.

Rencanakan C :Atau, Anda dapat menggunakan indeks "awalan":INDEX(foo(191)) , sambil membiarkannya VARCHAR(255) . Biasanya indeks "awalan" tidak berguna, tetapi Anda mungkin memiliki kasus penggunaan yang berfungsi.

Untuk membahas ini lebih lanjut, berikan SHOW CREATE TABLE untuk tabel yang dimaksud, dan diskusikan arti dari bidang tertentu dan INDEKSnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menerapkan algoritme peringkat Berita Peretas di SQL

  2. MySQL - Jika Dimulai Dengan Angka Atau Karakter Khusus

  3. #1242 - Subquery mengembalikan lebih dari 1 baris - mysql

  4. perbarui nilai kolom dengan kolom tabel lain berdasarkan kondisi

  5. Bagaimana cara membatasi jumlah baris per nilai bidang dalam SQL?