遇到mysql表情乱码问题总结
2017-11-21 20:28
351 查看
MySQL 编码
编码的种类
SHOW VBRIABLES LIKE '%character%';
1) character_set_client : MySQL Server 假定client传输数据过来的时候的编码
2) character_set_connection: Server收到SQL语句时,将其转换成的编码
3) character_set_results: Server在返回数据给客户端时,会将数据转成这个编码
4) character_set_system: 元数据编码(表名, 列名等)
5) character_set_server, character_set_database, character_set_table, character_set_column: MySQL默认的 服务器/数据库/表/列 编码, 优先级由低到高, 就是表编码可覆盖库编码,列编码可覆盖表编码
校对集种类
collation是字符的排序规则,就是字符之间比较大小的规则,例如utf8_general_ci表示的就是按照utf8编码且忽略大小写来排序,MySQL在排序时会将两个比较字符先转化为相同的编码,如果出现编码不兼容,则会抛出错误.
关于 SET NAMES 和 SET CHARACTER SET
SET NAMES 'ENCODING' 是设置以上编码的命令,它影响的编码包括:character_set_client, character_set_connection, character_set_results, collation_connection
SET CHARACTER SET 'ENCODING' 影响的编码包括:character_set_client, character_set_results
简而言之 SET NAMES 会影响Server的编码和解码, 而 SET CHARACTER SET 只会影响Server的解码
如果说我们使用latin1打开一个连接,然后将set names utf8,则会出现问题,因为这会使得服务器认为客户端传入数据是utf8编码,而实际上使用的确实latin1
所以最好的解决策略是同意所有的解码和编码规则
下面是MySQL编码修改的方法
编辑/etc/mysql/my.cnf
在[client]节点下添加
default-character-set=utf8
在[mysqld]节点下添加
character-set-server=utf8
collation-server=utf8_general_ci
重启mysql服务
service mysql restart 即可
进入mysql,查看编码
show variables like "character%";
可以看到已经改好
编码的种类
SHOW VBRIABLES LIKE '%character%';
1) character_set_client : MySQL Server 假定client传输数据过来的时候的编码
2) character_set_connection: Server收到SQL语句时,将其转换成的编码
3) character_set_results: Server在返回数据给客户端时,会将数据转成这个编码
4) character_set_system: 元数据编码(表名, 列名等)
5) character_set_server, character_set_database, character_set_table, character_set_column: MySQL默认的 服务器/数据库/表/列 编码, 优先级由低到高, 就是表编码可覆盖库编码,列编码可覆盖表编码
校对集种类
collation是字符的排序规则,就是字符之间比较大小的规则,例如utf8_general_ci表示的就是按照utf8编码且忽略大小写来排序,MySQL在排序时会将两个比较字符先转化为相同的编码,如果出现编码不兼容,则会抛出错误.
关于 SET NAMES 和 SET CHARACTER SET
SET NAMES 'ENCODING' 是设置以上编码的命令,它影响的编码包括:character_set_client, character_set_connection, character_set_results, collation_connection
SET CHARACTER SET 'ENCODING' 影响的编码包括:character_set_client, character_set_results
简而言之 SET NAMES 会影响Server的编码和解码, 而 SET CHARACTER SET 只会影响Server的解码
如果说我们使用latin1打开一个连接,然后将set names utf8,则会出现问题,因为这会使得服务器认为客户端传入数据是utf8编码,而实际上使用的确实latin1
所以最好的解决策略是同意所有的解码和编码规则
下面是MySQL编码修改的方法
编辑/etc/mysql/my.cnf
在[client]节点下添加
default-character-set=utf8
在[mysqld]节点下添加
character-set-server=utf8
collation-server=utf8_general_ci
重启mysql服务
service mysql restart 即可
进入mysql,查看编码
show variables like "character%";
可以看到已经改好
相关文章推荐
- 乱码问题总结(后续遇到问题不断追加上....)
- mysql c++ connector 1.0.5 getString方法 使用过程中遇到汉字产生的乱码问题的解决方法
- 关于MySQL乱码问题总结
- Redhat5下MySql遇到的乱码问题
- MySQL遇到中文乱码问题的解决
- php连接mysql学习过程中遇到的各种问题总结
- 配置Apache+PHP+MySql时可能遇到的问题总结
- 安装mysql时遇到的一些问题总结 一
- 安装和启动MySQL时遇到的问题总结
- Android客户端页面提交数据到tomcat的servlet插入mysql中的信息表遇到的中文乱码问题
- Mysql乱码问题总结
- Jboss Seam, mysql中文乱码问题4步骤总结(转)
- sql点滴40—mysql乱码问题总结
- MySQL 中文乱码问题总结
- mysql遇到的问题总结
- linux下安装cmake和mysql遇到的问题总结
- 安装mysql 遇到问题总结 二
- Mysql中文字符出现乱码容易遇到的问题
- MySQL 主从复制遇到的问题总结
- SpringBoot插入数据到Mysql中遇到的乱码问题(Mysql环境原因)