首页 > 代码库 > Mysql编码, Mysql编码流程, Mysql编码顺序, Mysql编码原理, Mysql编码修改依据

Mysql编码, Mysql编码流程, Mysql编码顺序, Mysql编码原理, Mysql编码修改依据

编码查看方式以及解释说明:
需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为:
 >show variables like ‘character%‘;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
 
从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8;
其中,
character_set_client: 为客户端编码方式;客户端发送的查询中使用的字符集
character_set_connection: 为建立连接使用的编码;
character_set_database: 数据库的编码;数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
character_set_results:结果集的编码;
有待验证:只要保证以上几个采用的编码方式一样,就不会出现乱码问题。
character_set_server: 数据库服务器的编码;服务器安装时指定的默认字符集设定。
character_system: 数据库系统使用的字符集设定。
另一个查看数据库编码的命令:
>SHOW VARIABLES LIKE ‘collation%‘;
 
MYSQL关于字符编码方面的存储原理
程序配置文件.连接串: CharSet=UTF8, 说明:
查询语句使用此种编码格式发送到服务器上
注意:查询结果仍然是以反回数据的格式传送。
查询语句执行逻辑:
1. 程序配置连接串: CharSet=UTF8, 将查询语句使用"CharSet=UTF8"此种格式的编码发送到服务器上
2. Mysql将接收到的查询语句转成character_set_client指定的格式,
3. 接着转成character_set_connection指定的格式
4. 接着将character_set_connection转为内部操作字符
       - 使用每个数据字段的CHARACTER SET设定值;
       - 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
       - 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
       - 若上述值不存在,则使用character_set_server设定值。
5. 将操作结果从内部操作字符集转换为character_set_results。
 
执行语句执行逻辑
1. 程序配置连接串: CharSet=UTF8, 将执行语句使用"CharSet=UTF8"此种格式的编码发送到服务器上
2. Mysql将接收到的查询语句转成character_set_client指定的格式,
3. 接着转成character_set_connection指定的格式
4. 接着将character_set_connection转为内部操作字符
       - 使用每个数据字段的CHARACTER SET设定值;
       - 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
       - 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
       - 若上述值不存在,则使用character_set_server设定值。
5. 将操作结果从内部操作字符集转换为character_set_database储存