深入理解MySQL字符集设置
2015-06-28 13:52
525 查看
字符集(Character set)和校对(Collation)
每种字符集都可能有多种校对规则,并且有一个默认的校对规则。
remember:只有基于字符的值才真正的“有”字符集的概念,对于其他类型的值,字符集只是一种设置,指定用哪一种字符集来做比较或者其他操作。
ps:可以使用前缀和COLLATE来指定字符串的字符集或者校对字符集
_ci(大小写不明感)
_bin(字符串编码的二进制值)
创建数据库的时候,将根据服务器上的
创建表的时候,将根据数据库的字符集设置指定表的字符集设置
创建列的时候,讲根据表的设置指定列的字符集设置
在服务器和客户端通信时的设置
服务器总是假设假设客户端是按照character_set_client设置的字符来传输数据和SQL的
当服务器收到客户端的SQL语句时,它先将其转换成字符集
当服务端返回数据或者错误信息给客户端时,它回将其转换成
我们在实际编码中在执行sql之前往往会先加上一句”set names utf8”,那么这到底影响了些啥呢?
先执行
show variables like ‘character_set%’
然后执行
set names latin1
show variables like ‘character_set%’
没错影响的正是
注意: set names utf8只是影响这次会话的环境变量。
字符集设置为utf8“整个世界都清净了”
google之发现是由于mysql的utf8最多只支持3个字节,如果想插入更多最好是utf8mb4(most bytes 4)
MySQL内核月报
utf8 utf8mb4区别
utf8mb4校对规则
每种字符集都可能有多种校对规则,并且有一个默认的校对规则。
remember:只有基于字符的值才真正的“有”字符集的概念,对于其他类型的值,字符集只是一种设置,指定用哪一种字符集来做比较或者其他操作。
ps:可以使用前缀和COLLATE来指定字符串的字符集或者校对字符集
校对规则
_cs(大小写敏感)_ci(大小写不明感)
_bin(字符串编码的二进制值)
MySQL的设置
创建对象时的默认值创建数据库的时候,将根据服务器上的
character_set_server设置来设定该数据库的默认字符集
创建表的时候,将根据数据库的字符集设置指定表的字符集设置
创建列的时候,讲根据表的设置指定列的字符集设置
在服务器和客户端通信时的设置
服务器总是假设假设客户端是按照character_set_client设置的字符来传输数据和SQL的
当服务器收到客户端的SQL语句时,它先将其转换成字符集
character_set_connection。它还使用这个设置来决定如何将数据转换成字符串
当服务端返回数据或者错误信息给客户端时,它回将其转换成
character_set_result
我们在实际编码中在执行sql之前往往会先加上一句”set names utf8”,那么这到底影响了些啥呢?
先执行
show variables like ‘character_set%’
然后执行
set names latin1
show variables like ‘character_set%’
没错影响的正是
character_set_client character_set_connection character_set_results
注意: set names utf8只是影响这次会话的环境变量。
MySQL字符集的一些建议
建立数据库/表和进行数据库操作时尽量显式指出使用的字符集,而不是依赖于MySQL的默认设置,否则MySQL升级时可能带来很大困扰;字符集设置为utf8“整个世界都清净了”
补充
数据库报Incorrect String value \xF0\x9F\x98\x98
google之发现是由于mysql的utf8最多只支持3个字节,如果想插入更多最好是utf8mb4(most bytes 4)
参考资料
《高性能MySQL》7.9节(291~299)MySQL内核月报
utf8 utf8mb4区别
utf8mb4校对规则
相关文章推荐
- MySQL中的integer 数据类型
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复
- MySQL 优化
- MySQL 数据类型