phpMyAdmin
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> phpMyAdmin

Điều gì sẽ xảy ra với dữ liệu hiện có nếu tôi thay đổi đối chiếu của một cột trong MySQL?

Bài viết http://mysqldump.azundris.com/archives/60 -Handling-character-sets.html thảo luận về vấn đề này một cách dài dòng và cũng cho biết điều gì sẽ xảy ra.

Xin lưu ý rằng bạn đang trộn một BỘ KÝ TỰ (thực ra là một bảng mã) với một COLLATION.

Một bộ ký tự xác định biểu diễn vật lý của một chuỗi theo byte trên đĩa. Bạn có thể hiển thị điều này bằng cách sử dụng hàm HEX (), ví dụ:SELECT HEX(str) FROM t WHERE id = 1 để xem cách MySQL lưu trữ các byte trong chuỗi của bạn. Những gì MySQL cung cấp cho bạn có thể khác nhau, tùy thuộc vào bộ ký tự của kết nối của bạn, được xác định bằng SET NAMES .... .

Đối chiếu là một thứ tự sắp xếp. Nó phụ thuộc vào bộ ký tự. Ví dụ:dữ liệu của bạn có thể nằm trong bộ ký tự latin1, nhưng nó có thể được sắp xếp theo một trong hai thứ tự sắp xếp tiếng Đức latin1_german1_ci hoặc latin1_german2_ci. Tùy thuộc vào sự lựa chọn của bạn, các Umlaut như ö sẽ được sắp xếp là oe hoặc o.

Khi bạn đang thay đổi một bộ ký tự, dữ liệu trong bảng của bạn cần được viết lại. MySQL sẽ đọc tất cả dữ liệu và tất cả các chỉ mục trong bảng, tạo một bản sao ẩn của bảng tạm thời chiếm dung lượng đĩa, sau đó di chuyển bảng cũ vào một vị trí ẩn, di chuyển bảng ẩn vào vị trí và sau đó xóa dữ liệu cũ, giải phóng tăng dung lượng đĩa. Trong một khoảng thời gian nào đó, bạn sẽ cần gấp đôi dung lượng lưu trữ cho việc đó.

Khi bạn thay đổi đối chiếu, thứ tự sắp xếp của dữ liệu sẽ thay đổi nhưng không thay đổi chính dữ liệu. Nếu cột bạn đang thay đổi không phải là một phần của chỉ mục, bạn không cần phải làm gì ngoài việc viết lại tệp frm và các phiên bản MySQL đủ gần đây không nên làm nhiều hơn thế.

Khi bạn đang thay đổi đối chiếu của một cột là một phần của chỉ mục, chỉ mục cần được viết lại, vì chỉ mục là một đoạn trích được sắp xếp của bảng. Thao tác này sẽ lại kích hoạt logic sao chép bảng ALTER TABLE được nêu ở trên.

MySQL cố gắng bảo toàn dữ liệu khi làm điều này:Miễn là dữ liệu bạn có có thể được biểu diễn trong bộ ký tự đích, việc chuyển đổi sẽ không bị mất mát. Cảnh báo sẽ được in nếu có dữ liệu bị cắt xén và dữ liệu không thể biểu diễn trong bộ ký tự đích sẽ được thay thế bằng?



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Không thể đăng nhập vào phpMyAdmin, không có lỗi hiển thị

  2. Tạo CSV dựa trên truy vấn MySQL từ phpMyAdmin

  3. Cách nhập nhiều tệp csv vào Cơ sở dữ liệu MySQL

  4. Cách cập nhật dữ liệu trong cơ sở dữ liệu SQL

  5. Lỗi cú pháp SQL gần gunzip khi khôi phục cơ sở dữ liệu bằng tệp .sql.gz