utf8mb3是一种字符集 (charset)utf8mb4_unicode_ci是一种排序规则 (collation),它基于utf8mb4字符集
让我详细解释一下:
UTF8MB3 vs UTF8MB4
UTF8MB3
- MySQL中传统的”UTF-8”实现(在MySQL中称为
utf8,现在别名为utf8mb3) - 每个字符最多使用3个字节
- 只能存储基本的Unicode字符
- 不支持emoji、某些特殊符号和较新的Unicode字符
UTF8MB4
- 完整的UTF-8实现
- 每个字符最多使用4个字节
- 支持完整的Unicode字符集
- 支持emoji、表情符号、特殊符号等
要将整个数据库及其所有表和列的字符集修改为 utf8mb4_unicode_ci,您需要按以下步骤操作:
1. 修改数据库字符集
ALTER DATABASE your_database_nameCHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;
2. 修改所有表的字符集
首先查询数据库中的所有表,然后逐一修改:
-- 查看数据库中的所有表SHOW TABLES;-- 对每个表执行以下命令ALTER TABLE table_nameCONVERT TO CHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;
3. 一键修改所有表(使用脚本)【实用-推荐】
您可以使用以下SQL脚本来生成修改所有表的语句:
SELECT CONCAT('ALTER TABLE ', table_name,' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') AS alter_statementFROM information_schema.tablesWHERE table_schema = 'your_database_name';
复制查询结果中生成的每条ALTER TABLE语句,逐一执行。
4. 修改现有列的字符集
如果某些列有特定的字符集设置,还需要单独修改:
-- 查找所有字符类型的列SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ',data_type, '(', character_maximum_length, ') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',CASE WHEN is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END, ';') AS alter_column_statementFROM information_schema.columnsWHERE table_schema = 'your_database_name'AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext');
5. 验证修改结果
-- 检查数据库字符集SELECT default_character_set_name, default_collation_nameFROM information_schema.schemataWHERE schema_name = 'your_database_name';-- 检查表字符集SELECT table_name, table_collationFROM information_schema.tablesWHERE table_schema = 'your_database_name';-- 检查列字符集SELECT table_name, column_name, character_set_name, collation_nameFROM information_schema.columnsWHERE table_schema = 'your_database_name'AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext');
