Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách đặt charset cho cột trong MySQL


Cú pháp

Sử dụng ALTER TABLE ... MODIFY với mệnh đề CHARACTER SET:

ALTER TABLE ten_bang MODIFY ten_cot kieu_du_lieu CHARACTER SET ten_charset;

Ví dụ: Đổi cột FirstName từ utf8mb4 sang utf8

1. Tạo bảng (mặc định utf8mb4)

mysql> CREATE TABLE setCharsetDemo ( 
-> FirstName VARCHAR(60) 
-> ); 
Query OK, 0 rows affected (2.09 sec)

2. Kiểm tra charset hiện tại

mysql> SHOW CREATE TABLE setCharsetDemo;
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Table          | Create Table                                                                                                                                                           | 
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec)

3. Đổi charset sang utf8

mysql> ALTER TABLE setCharsetDemo 
-> MODIFY FirstName VARCHAR(60) CHARACTER SET utf8; 
Query OK, 0 rows affected, 1 warning (2.81 sec) 
Records: 0 Duplicates: 0 Warnings: 1

4. Kiểm tra lại

mysql> SHOW CREATE TABLE setCharsetDemo;
+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Table          | Create Table                                                                                                                                                                         | 
+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 
+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec)

Charset phổ biến trong MySQL

CharsetMô tảHỗ trợ UnicodeKích thước tối đa/ký tự
utf8mb4UTF-8 đầy đủ (4 bytes)✅ Emoji, chữ Hán, tất cả Unicode4 bytes
utf8UTF-8 cũ (3 bytes)❌ Không hỗ trợ emoji, một số chữ hiếm3 bytes
latin1Western European❌ Chỉ Latin cơ bản1 byte
asciiASCII cơ bản❌ Chỉ 128 ký tự1 byte

Collation đi kèm

  • utf8mb4_unicode_ci: Chuẩn Unicode, chính xác, chậm hơn một chút
  • utf8mb4_general_ci: Nhanh hơn, ít chính xác hơn cho một số ngôn ngữ
  • utf8mb4_0900_ai_ci: Mặc định MySQL 8.0, hỗ trợ Unicode 9.0, accent-insensitive

Đặt charset cho toàn bảng

ALTER TABLE ten_bang CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Lưu ý

  • Luôn backup trước khi ALTER TABLE trên bảng lớn
  • Thao tác này khóa bảng (metadata lock) - tránh giờ cao điểm
  • MySQL 8.0 mặc định utf8mb4 - khuyên dùng cho dự án mới
  • Kiểm tra độ dài cột: VARCHAR(255) utf8mb4 = 765 bytes > 767 byte limit (index)