有些问题可能比较基础,但是没有经过系统学习还是可能会出错,记录下。

这次是mysql的编码问题。

背景是部署新的测试环境,给了一台服务器还有在另一个环境下的mysql,配置过程中发现mysql编码有问题,查看结果如下

发现character_set_client和character_set_connection以及character_set_results都是latin1(也就是iso-8859-1),这显然不行。于是想到修改数据库服务器上的my.cnf文件,在[client]下增加了一行

default-character-set=utf8 

发现还是不行,一直不理解问题出在哪里,后来才发现自己的愚蠢,问题不是出在mysql服务端的配置,而是客户端的配置。

比如执行 mysql -h test-db.com -u test -p的时候,决定此次连接的编码的一方是当前mysql客户端的配置文件my.cnf而不是mysql数据库服务端的配置文件!!!

这次经过修改之后终于正常了。之前还找过dba的同事,感觉脸火辣辣的,这酸爽╮(╯_╰)╭

顺便回顾下各个属性的意义吧。

 character_set_client: MySQL服务器假定client传输过来的数据的编码.(客户端决定)
character_set_connection: MySQL服务器接收到数据时,将其转换成哪种编码.(客户端决定)
character_set_results: MySQL服务器响应给客户端的数据采用哪种编码.(客户端决定)
character_set_system: 元数据采用的编码(表名, 列名等).
character_set_server: MySQL服务器默认的数据编码方式.
character_set_database: MySQL数据库默认的数据编码方式.
character_set_table: MySQL数据库中表的默认数据编码方式.
character_set_column: MySQL数据库中表的列(字段)默认的数据编码方式.
MySQL默认的"服务器/数据库/表/列"的编码方式,优先级由低到高, 表的编码方式可覆盖数据库的编码方式,列(字段)的编码方式可覆盖表的编码方式.
 
MySQL配置文件中的"default-character-set=utf8"相当于"set names utf8".

MySQL在执行操作前,先把接收到的数据从character_set_client转换为character_set_connection,
然后再把character_set_connection转换为与内部数据库相匹配的字符集,
最后执行完操作后,再把返回的结果转换为character_set_results.

最新文章

  1. linux定时备份mysql并同步到其它服务器
  2. 【Python】-【类解析】--【脚本实例】
  3. HDOJ 1711 Number Sequence
  4. c# Sqlite帮助类
  5. QT程序探测所需DLL,静态连接和打包
  6. z-index无效问题的解决方法
  7. Hibernate 主键策略
  8. 初学AngularJS
  9. Android SharedPreference 数据存储
  10. DedeCMS标签 PHP判断语句写法
  11. 关于javascript在OJ系统上编程的注意事项
  12. JSESSIONID的简单说明
  13. 遇到短信轰炸,别人换ip调你的短信接口怎么办
  14. Nginx使用教程(七):使用Nginx缓存之proxy cache
  15. 【清北学堂2018-刷题冲刺】Contest 6
  16. vCenter 异常关机后无法开启ESXi虚拟机的处理.
  17. Java知多少(64)线程死锁
  18. 在input文本框中存入对象格式的数据
  19. Python 常用 PEP8 编码规范
  20. 重载和const参数

热门文章

  1. HDU-1257_最少拦截系统
  2. deepin 15.11 升级docker-ce 18.01到19.03.1,升级docker compose 1.23到1.24.1
  3. part10.2-字符设备驱动模型
  4. ccf-201703-4-地铁修建
  5. js获取dom节点
  6. vue 组件评论 的同时进行刷新
  7. Python--day46--分组(看了别人博客掌握的)
  8. 同一个页面 andriod和ios设备上的按钮颜色不一致
  9. 中和IOS七层架构和TCP/IP四层架构的五层架构
  10. tensorflow在文本处理中的使用——词袋