MySQL character set、collation(整理

2015-11-17  本文已影响792人  九都散人
1 查看当前设置

Character: 字符集
Collation:在同一字符集内字符之间的比较规则、排序

collation查看:
SHOW VARIABLES LIKE 'collation_%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

character set查看:
SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8mb4                          |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8mb4                          |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
2 设置

mysql 命令:

SET  Variable_name  = Value

1 服务器级

(/etc/mysql/my.cnf)里设置: 
[mysqld] 
    character_set_server=utf8 
    collation_server=utf8_general_ci 

2 数据库级

3 表级
查看show create table �table_name;

CREATE TABLE `b` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `sid` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4 列级

5 连接级别

# 服务端使用这个编码来理解客户端发来的
character_set_client;

# 连接层字符集 character_set_client 转 character_set_connection
show variables like 'character_set_connection' ; 

# 服务端使用这个编码回送结果集和错误信息
show variables like 'character_set_results'; 
3 常见问题
  • 插入时根据MySQL服务器的默认设置,character_set_client、character_set_connection和character_set_results均为latin1
  • 插入操作的数据将经过latin1=>latin1=>utf8的字符集转换过程,这一过程中每个插入的汉字都会从原始的3个字节变成6个字节保存
  • 插入时根据连接字符集设置,character_set_client、character_set_connection和character_set_results均为utf8
  • 插入数据将经过utf8=>utf8=>latin1的字符集转换,若原始数据中含有\u0000~\u00ff范围以外的Unicode字符,会因为无法在latin1字符集中表示而被转换为“?”(0×3F)符号,以后查询时不管连接字符集设置如何都无法恢复其内容了。转换过程如下图:
4 建议
上一篇 下一篇

猜你喜欢

热点阅读