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

Di chuyển MySQL UTF8 sang UTF8MB4 các vấn đề và câu hỏi

  1. Có giới hạn về kích thước của một INDEX. Bạn đã đạt đến giới hạn vì utf8mb4 cần tối đa 4 byte per ký tự , trong đó utf8 chỉ cần 3. Trong khi đó, giới hạn kích thước INDEX tính bằng byte .

'Giải pháp' là quyết định phải làm gì với chỉ mục quá kích thước. (thêm bên dưới)

2.

ALTER TABLE t CHANGE col col ...

giống với logic hơn

ALTER TABLE t MODIFY col ...

Đầu tiên cho phép bạn thay đổi tên của cột, do đó có hai bản sao của tên cột khi bạn không cần thay đổi tên.

  1. Rất có thể bạn đã có VARCHAR(255) chiếm 767 byte trong utf8 (3 * 255 + 2; "2" là kích thước của trường độ dài). Tương đương trong 4 byte utf8mb4 sẽ là (191) (4 * 191 + 2 =766; không có chỗ cho nhiều hơn 191).

  2. Tôi đã không nhìn thấy một bài báo về nó. Tôi nghi ngờ rằng những gì tôi vừa nói là hầu hết những gì cần phải nói.

Vì vậy ...

Kế hoạch A :Bạn có foo VARCHAR(255) không và nó là utf8? Dữ liệu trong đó có luôn (hiện tại và trong tương lai) ngắn hơn 191 ký tự không? Nếu vậy, chỉ cần thực hiện ALTER.

Lập kế hoạch B :Nếu bạn cần nhiều hơn 191, bạn có thực sự cần INDEX không? DROP INDEX có thể là một lựa chọn thay thế.

Lập kế hoạch C :Hoặc, bạn có thể sử dụng chỉ mục "tiền tố":INDEX(foo(191)) , trong khi để nó VARCHAR(255) . Thông thường các chỉ mục "tiền tố" là vô dụng, nhưng bạn có thể có một trường hợp sử dụng mà nó hoạt động.

Để thảo luận thêm về vấn đề này, vui lòng cung cấp SHOW CREATE TABLE cho bảng được đề cập và thảo luận về ý nghĩa của trường cụ thể đó và INDEX của nó.



  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àm thế nào để nhóm các hàng mysql có cùng giá trị cột thành một hàng?

  2. Cấu trúc lại một cơ sở dữ liệu xấu với các vòng lặp PHP hoặc MySQL

  3. Xếp hạng cập nhật MySQL đơn giản với ràng buộc

  4. Bảng không tồn tại sau khi TẠO BẢNG

  5. Cách kết nối Cơ sở dữ liệu MySQL với Trang web PHP