mysql字符集总结
- 查看数据库支持的字符集:
SHOW CHARACTER SET;
查看数据库当前使用的字符集:
SHOW VARIABLES LIKE '%char%';
各字段含义
注:Linux下默认字符集是latin1,不支持中文。修改数据库字符集:
alter database database_name character set xxx;
- 修改表字符集:
alter table table_name character set xxx;
- 修改表字符集的同时转换已有列字符集:
alter table table_name convert to character set xxx;
修改列字符集
ALTER TABLE table_name MODIFY column_name {CHAR | VARCHAR | TEXT} (column_length) [CHARACTER SET charset_name] [COLLATE collation_name]
`
字符集校对规则(COLLATION)
在字符集内部进行字符比较的规则,如大小写敏感等
字符集校对规则特征:
- 两个不同的字符集不能有相同的校对规则
- 每个字符集有一个默认校对规则
- 存在校对规则命名约定:以其相关的字符集名开始,中间包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
修改数据库默认字符集方法:
set variable_name=character_set
eg:set character_set_database=utf8mb4
这种方法设置的字符集仅在此次连接,回话有效,重启后恢复默认
- 在my.cnf配置文件设置字符集默认参数
注:在MySQL5.5.3之前,字符集在my.cnf中的配置为:[client] # 设置客户端字符集 default-character-set = utf8mb4 [mysqld] # 设置服务端默认字符集 character-set-server = utf8mb4 # 设置服务端字符集默认校对规则 collation-server = utf8mb4_unicode_ci # 设置拒绝客户端发送的字符集设置信息,即以服务端设置的字符集为准,可以防止客户端误操作 character-set-client-handshake = FALSE
[mysqd]
default-character-set=utf8mb4
但是在5.5.3中弃用了这个属性,详见文档
注:emoji表情为四个字节,而utf8是三个字节的,因此用utf8存储emoji表情会报错
Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F
,必须用utf8mb4,utf8mb4是用四个字节存储