1.字符集及字符集校对规则说明:
字符集(CharacterSet)和校对规则(Collation)。
字符集和校对规则有4个级别的默认设置:服务器(server),数据库(database),数据表(table)和连接(connection)。
MySQL中是根据下面几个变量确定服务器端和客户端用的什么字符集:
character_set_client 客户端字符集
character_set_connection 客户端与服务器端连接采用的字符集
character_set_results SELECT查询返回数据的字符集
character_set_system
character_set_database 数据库采用的字符集
2.MySQL的字符集处理规则:
发送请求:
1)客户端发送请求到服务器端。
2)服务器端会把请求的数据从客户端字符集(character_set_client)转成服务器连接字符集(character_set_connection)。
3)然後服务器会检测存储区域(table,column)的字符集,然后把数据从连接字符集(character_set_connection)转为存储区域(table,column)的字符集,然後再存储或者查询。
返回请求:
1)服务器将存储区域(table,column)的字符集转换成服务器连接字符集(character_set_connection)。
2)将服务器连接字符集(character_set_connection)转换成结果字符集(character_set_results),再发送到客户端。
3.查看和修改字符集编码及校对规则:
1)查看:
root@localhost : (none) 09:40:20> show variables like 'character%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------------+
mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+-----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
2)修改默认字符集方法:
修改/etc/my.cnf文件中的相关参数,并重启动数据库;
[client]
loose_default-character-set=utf8mb4
[mysqld]
default-character-set=utf8mb4
character_set_server=utf8mb4
collation=utf8mb4_general_ci
[mysqldump]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
3)验证修改后是否生效规则:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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 | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
4.set names的作用
set names实际上就是同时设置了character_set_client,character_set_connection,character_set_results这三个系统变量。
如在mysql命令行上输入 set names 'utf8mb4' 命令等同于:
SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;
5.总结:总结为以下四点:
1)要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致。
2)要保证通讯的字符集与数据库的字符集一致,即character_set_client,character_set_connection与character_set_database一致。
3)要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致。
4)要保证程序编码与浏览器编码一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?" />一致。
6.其他说明:
1)支持utf8mb4的mysql版本:mysql5.3
2)支持utf8mb4的jdbc版本:5.1.31