mysql字符集
2020-03-05 本文已影响0人
cdz620
参考url
urlhttp://www.111cn.net/database/mysql/55781.htm
修改my.ini,修改完后重启
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET collation_connection = utf8_general_ci '
init_connect = 'SET NAMES utf8'
default-character-set 只跟客户端连接有关
命令命令
set character_set_server=utf8;
set character_set_database=utf8;
SET character_set_server = utf8;
SET collation_server = utf8_general_ci;
SET collation_database = utf8_general_ci;
SET collation_connection = utf8_general_ci;
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_results = utf8;
当选定一个数据库后,变量character_set_database 被设置为这个数据库的字符串集
排错命令
- SHOW CHARACTER SET; #查看mysql支持的字符集
- SHOW COLLATION; #查看mysql的字符序列(排序方式)
- SHOW VARIABLES LIKE 'character%'; #查看mysql系统默认字符集设置值
- SHOW VARIABLES LIKE 'collation%'; #查看mysql系统默认的字符序列(排序方式) 设置值
- SQL函数HEX、LENGTH、CHAR_LENGTH
- SQL函数CHARSET、COLLATION
客户端与服务器端交互过程字符集设置
一般三个字符集的设置相同
- character_set_client
- character_set_connection
- character_set_results
mysql字符集转换过程
- MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
- 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
- 使用每个数据字段的CHARACTER SET设定值;
- 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
- 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
- 若上述值不存在,则使用character_set_server设定值。
- 将操作结果从内部操作字符集转换为character_set_results。
乱码问题的产生
- 我们的字段没有设置字符集,因此使用表的数据集;
- 我们的表没有指定字符集,默认使用数据库存的字符集;
- 我们的数据库在创建的时候没有指定字符集,因此使用character_set_server设定值;
- 我们没有特意去修改character_set_server的指定字符集,因此使用mysql默认;
- mysql默认的字符集是latin1,因此,我们使用了latin1字符集,而我们character_set_connection的字符集是UTF-8,插入中文乱码也再所难免了。