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

Đây có phải là cách an toàn để chuyển đổi bảng MySQL từ latin1 sang utf-8 không?

Có 3 trường hợp khác nhau cần xem xét:

Các giá trị thực sự được mã hóa bằng Latin1

Đây là trường hợp nhất quán:bộ mã được khai báo và mã hóa nội dung khớp nhau. Đây là trường hợp duy nhất tôi đề cập trong câu trả lời đầu tiên của mình.

Sử dụng lệnh bạn đã đề xuất:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Lưu ý rằng CONVERT TO CHARACTER SET lệnh chỉ xuất hiện trong MySQL 4.1.2, vì vậy bất kỳ ai sử dụng cơ sở dữ liệu được cài đặt trước năm 2005 đều phải sử dụng thủ thuật xuất / nhập. Đây là lý do tại sao có rất nhiều tập lệnh và tài liệu kế thừa trên Internet làm theo cách cũ.

Các giá trị đã được mã hóa bằng utf8

Trong trường hợp này, bạn không muốn mysql chuyển đổi bất kỳ dữ liệu nào, bạn chỉ cần thay đổi siêu dữ liệu của cột.

Đối với điều này, trước tiên bạn phải thay đổi loại thành BLOB, sau đó thành TEXT utf8 cho mỗi cột, để không có chuyển đổi giá trị:

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8

Đây là cách được khuyến nghị và nó được ghi lại rõ ràng trong Alter Tài liệu về cú pháp bảng .

Các giá trị sử dụng trong một mã hóa khác

Mã hóa mặc định là Latin1 trong vài năm trên một số bản phân phối Linux. Trong trường hợp này, bạn phải sử dụng kết hợp hai kỹ thuật:

  • Sửa siêu dữ liệu bảng bằng thủ thuật loại BLOB
  • Chuyển đổi các giá trị bằng cách sử dụng CONVERT TO .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql cách kết hợp ba truy vấn từ hai bảng thành một truy vấn

  2. Mysql FROM_UNIXTIME dưới dạng UTC

  3. Hàm MySQL POW () - Nâng giá trị lên sức mạnh của giá trị khác

  4. Làm thế nào để chọn ngày và giờ mà không có giây trong mysql?

  5. Kết nối trên cơ sở dữ liệu MySQL từ xa thông qua Python