1 MySQL字符集
MySQL字符集包括校对规则,作用是定义、比较字符串的方式。
1.1 常用字符集
字符集 | 长度(字节) | 说明 |
GB2312 | 2 | 早期标准 |
GB18030 | 4 | 部分系统支持,少数数据库支持 |
GBK | 2 | 非国际标准,支持中文 |
UTF8 | 3 | 中英混合环境,推荐使用 |
latin1 | 1 | MySQL默认字符集 |
utf8mb4 | 4 | MySQL 5.5支持,兼容UTF8。强烈推荐 |
1.2 生产环境选择字符集
- 系统使用语言较多,选择UTF8
- 仅支持中文、海量数据、运算量大,使用GBK
- 互联网、移动互联网应用,选择utf8mb4
1.3 查看字符集
show character set;
2 MySQL字符集配置
2.1 MySQL 实例的字符集
--- 编译安装时配置
cmake .
--DDEFAULT_CHARACTER=utf8 \
--DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all
--- my.cnf的mysqld模块中配置
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4’
--- 启动mysql时,使用"--character-set-server"指定字符集(不建议)
mysqld --character-set-server=utf8mb4
2.2 MySQL 库的字符集
库字符集在建库之初配置,若未配置默认与实例字符集一致
--- 建库指定字符集
CREATE DATABASE ocean DEFAULT CHARACTER SET utf8 DEFAULT COLLATE = utf8_general_ci;
--- 查看库字符集
show variables like 'character_set_database%';
show variables like 'collation_database%';
2.3 MySQL 表的字符集
表字符集在建表之初配置,若未配置默认与库字符集一致
CREATE TABLE `ocean_tab1` ( `id` int(8) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2.4 MySQL 客户端的字符集
--- 临时生效配置
set names utf8;
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
--- 登录时,使用"--default-character-set"指定字符集
mysql --default-character-set=utf8
--- my.cnf的client中配置
[client]
default-character-set = utf8
--- 查看配置
show variables like 'character_set%';
3 MySQL字符集变更
3.1 MySQL 库字符集
ALTER DATABASE ocean CHARACTER SET latin1 COLLATE = latin1_swedish_ci;
ALTER DATABASE ocean CHARACTER SET utf8 COLLATE = utf8_general_ci;
3.2 MySQL 表字符集
ALTER TABLE ocean_tab1 CHARACTER SET latin1;
ALTER TABLE ocean_tab1 CHARACTER SET utf8;
3.3 MySQL 查看字符集
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
Variable_name | Value |
character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | utf8mb4 |
character_set_filesystem | binary |
character_set_results | utf8mb4 |
character_set_server | utf8mb4 |
character_set_system | utf8 |
character_sets_dir | /app/mysql8/share/charsets/ |
collation_connection | utf8mb4_0900_ai_ci |
collation_database | utf8mb4_0900_ai_ci |
collation_server | utf8mb4_0900_ai_ci |
注:collation_connection 、collation_database 、collation_server是非关键参数。
确保一下参数必须为utf8mb4
系统变量 | 描述 |
character_set_client | 客户端来源数据使用的字符集 |
character_set_connection | 连接层字符集 |
character_set_database | 当前选中数据库的默认字符集 |
character_set_results | 查询结果字符集 |
character_set_server | 默认的内部操作字符集 |
相关链接