zoukankan      html  css  js  c++  java
  • 【他山之石】mysql编码问题总结

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

    这次是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的同事,感觉脸火辣辣的,这酸爽╮(╯_╰)╭

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

    1 character_set_client: MySQL服务器假定client传输过来的数据的编码.(客户端决定)
    2 character_set_connection: MySQL服务器接收到数据时,将其转换成哪种编码.(客户端决定)
    3 character_set_results: MySQL服务器响应给客户端的数据采用哪种编码.(客户端决定)
    4 character_set_system: 元数据采用的编码(表名, 列名等).
    5 character_set_server: MySQL服务器默认的数据编码方式.
    6 character_set_database: MySQL数据库默认的数据编码方式.
    7 character_set_table: MySQL数据库中的默认数据编码方式.
    8 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.

  • 相关阅读:
    共望明月
    游丽都公园有感
    创业天才尼尔曼迈向成功的十四个原则
    赵娜(帮别人名字作诗)
    小幽默也有大道理:哲理幽默15则
    夜游草堂
    成功就是简单的事情重复做、重复做
    千万别入错行 15条人生建议
    听一堂课值三十九万,把它看完,定会有收获!
    VIEW:X$KCCRSControlfile Record Section directory (8.0 8.1)
  • 原文地址:https://www.cnblogs.com/bityinjd/p/8310831.html
Copyright © 2011-2022 走看看