Làm thế nào để thay đổi đối chiếu mặc định của bảng?


186
create table check2(f1 varchar(20),f2 varchar(20));

tạo một bảng với đối chiếu mặc định latin1_general_ci;

alter table check2 collate latin1_general_cs;
show full columns from check2;

hiển thị đối chiếu riêng lẻ của các cột dưới dạng 'latin1_general_ci'.

Sau đó, tác dụng của lệnh bảng thay đổi là gì?



Bạn có thể muốn thay đổi câu trả lời đúng vì bản thân tôi và nhiều người khác dường như đồng ý rằng câu thứ 2 là câu trả lời đúng.
Ahi Tuna

Câu trả lời:


597

Để thay đổi bộ ký tự mặc định và đối chiếu của một bảng bao gồm cả các cột hiện có (lưu ý chuyển đổi thành mệnh đề):

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

Chỉnh sửa câu trả lời, nhờ sự nhắc nhở của một số ý kiến:

Nên tránh giới thiệu utf8. Nó gần như không bao giờ là những gì bạn muốn, và thường dẫn đến những mớ hỗn độn bất ngờ. Bộ ký tự utf8 không tương thích hoàn toàn với UTF-8. Bộ ký tự utf8mb4 là những gì bạn muốn nếu bạn muốn UTF-8. - Rich Remer ngày 28 tháng 3 năm 18 lúc 23:41

Điều đó có vẻ khá quan trọng, rất vui vì tôi đã đọc các bình luận và cảm ơn @RichRemer. Nikki, tôi nghĩ bạn nên chỉnh sửa nó trong câu trả lời của bạn xem xét có bao nhiêu lượt xem. Xem tại đây https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html và ở đây Sự khác biệt giữa bộ ký tự utf8mb4 và utf8 trong MySQL là gì? - Paulpro ngày 12 tháng 3 lúc 17:46


4
Ý nghĩa của việc thay đổi bộ ký tự mặc định là gì? Nó có cập nhật dữ liệu hiện có và do đó cần phải chạy qua bảng và thực hiện cập nhật, khóa nó, v.v.?
cấp

utf8_bintốt hơn phải không? Sự khác biệt giữa utf8_binvà là utf8_unicode_cigì?
Jasom Dotnet

1
Đó chỉ là một ví dụ tôi đã sử dụng. Sự khác biệt là utf8_binphân biệt chữ hoa và utf8_unicode_cilà case-insensitive. Một cái không nhất thiết phải tốt hơn cái kia - sử dụng bất cứ thứ gì phù hợp với nhu cầu của bạn.
Nikki Erwin Ramirez

12
@JasomDotnet bây giờ bạn nên sử dụng utf8mb4_unicode_ci stackoverflow.com/questions/766809/ trên
baptx

2
Nên tránh khuyến cáo utf8. Nó gần như không bao giờ là những gì bạn muốn, và thường dẫn đến những mớ hỗn độn bất ngờ. Bộ utf8ký tự không tương thích hoàn toàn với UTF-8. Bộ utf8mb4ký tự là những gì bạn muốn nếu bạn muốn UTF-8.
Rich Remer

34

MySQL có 4 cấp độ đối chiếu: máy chủ, cơ sở dữ liệu, bảng, cột. Nếu bạn thay đổi đối chiếu máy chủ, cơ sở dữ liệu hoặc bảng, bạn không thay đổi cài đặt cho từng cột, nhưng bạn thay đổi đối chiếu mặc định.

Ví dụ: nếu bạn thay đổi đối chiếu mặc định của cơ sở dữ liệu, mỗi bảng mới bạn tạo trong cơ sở dữ liệu đó sẽ sử dụng đối chiếu đó và nếu bạn thay đổi đối chiếu mặc định của bảng, mỗi cột bạn tạo trong bảng đó sẽ có đối chiếu đó.


8
Trong thực tế, MySQL có FIVE Levels đối chiếu, có một cài đặt đối chiếu mặc định ở cấp độ ký tự mà nhiều người quên.
Devy

6
Ngoài ra còn có đối chiếu kết nối show variables like "collation%";, vì vậy tổng số là SIX .
Dzmitry Lazerka

9

Nó đặt đối chiếu mặc định cho bảng; nếu bạn tạo một cột mới, nó sẽ được đối chiếu với latin_general_ci - tôi nghĩ vậy. Hãy thử chỉ định đối chiếu cho cột riêng lẻ và xem nếu nó hoạt động. MySQL có một số hành vi thực sự kỳ lạ liên quan đến cách nó xử lý việc này.


3

có thể cần thay đổi bảng không chỉ SCHema

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)


<database name>thay vì<table name>
dnivog

1
Xem nhận xét của tôi về câu trả lời được chấp nhận tại sao bạn không nên đề xuất utf8, nhưng utf8mb4.
Rich Remer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.