MYSQL教程mysql字符编码设置问题

MYSQL教程mysql字符编码设置问题,第1张

概述介绍《MYSQL教程mysql字符编码设置问题》开发教程,希望对您有用。

《MysqL教程MysqL字符编码设置问题》要点:
本文介绍了MysqL教程MysqL字符编码设置问题,希望对您有用。如果有疑问,可以联系我们。

导读:在telnet终端 *** 作MysqL数据库时会遇到中文乱码问题,是由于字符集设定错误造成的.涉及到好几个地方的字符集设置,如果搞清楚它后面的原理...

MysqL学习在telnet终端 *** 作MysqL数据库时会遇到中文乱码问题,是由于字符集设定错误造成的.
涉及到好几个地方的字符集设置,如果搞清楚它后面的原理,就可以很容易办理这些乱码问题.

MysqL学习在MysqL的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条SQL语句,回车,然后终端显示出查询的结果.
这个过程中,只有终端和 三个MysqL的系统变量指定了正确的字符集,才能保证将一个正确的SQL语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示.

MysqL学习三个MysqL的系统变量是:
  ①character_set_clIEnt,终端字符集,告诉server客户端提交的SQL语句的编码格式
  ②character_set_connection,连接字符集,是服务器翻译SQL语句时用到的编码格式
  ③character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式
  在MysqL终端通过执行命令 show variables like 'char%';可以查看这几个变量的值.这三个变量通常都设定为同一种字符集,用命令set names [charset name]; 就可以修改这三个变量的值.

MysqL学习一般来说,只要设定了能够表示数据的字符集,查询的结果都可以在终端正确显示.好比在数据库中存入了中文数据,不管 存入时使用的什么字符集,在终端即可以用set names命令设置为utf8,也可以设置为gbk编码,只要的终端显示的字符集和的设定一致就可以正确处理中文.

MysqL学习例子,使用的表t1是utf8编码,表中的字段c1继承了这个编码,表创建如下
 

MysqL> create table t1 ( c1 text not null ) character set utf8;
//用的字符是汉字“范”,gbk编码为b7 b6,utf8编码为e8 8c 83

MysqL学习插入数据:
  MysqL> insert into t1 values ('范');

  1、如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中MysqL不需要做编码转换.写入数据库的内容可以通过执行 select hex( c1 ) from t1;得到数据的十六进制编码来验证.

   2、如果终端设置为utf8,并且执行了set names gbk,那么执行完这个插入 *** 作后,写入的二进制数据是e9 91 bc,这是汉字“鑼”的utf8编码.这是因为,终端输入的“范”用的是utf8编码,而服务器以为终端发送过来的内容是gbk编码,所以在向t1表中插 入时进行了一次gbk到utf8的转换,结果当然是错误的.

  3、如果终端设置为gbk,并且执行 了set names gbk,那么执行完插入 *** 作后,写入t1的依然是“范”这个字的utf8编码.插入过程中,终端输入的是“范”的gbk编码b7 b6,服务器被告知终端发过来的SQL语句是gbk编码(由character_set_clIEnt指定),所以在插入数据前做了一次gbk到utf8 的编码转换.

  4、如果终端设置为gbk,并且执行了set names utf8,MysqL会报出一个数据被截断的警告.实际上,输入终端的是“范”这个字符的gbk编码b7 b6,而服务器被告知客户端发过来的SQL语句是utf8编码,所以在执行过程中没有做转码,直到插入数据时,发现b7 b6不符合utf8的编码规则,给出了警告信息,实际插入的数据是3f 3f,也就是两个问号.

  查询时是同样的道理,MysqL也是根据set names设定的字符集来对返回给客户端的结果集做相应的编码转换,如果转换的结果和终端显示的字符集一致,就能正确显示,如果不一致就是乱码.

  结论是,只要终端的字符集和set names指定的字符集一致就可以让MysqL在处理过程中执行正确的转码并且正确地显示.

  另外,如果通过程序 *** 作MysqL数据库,那么也需要事先执行set names命令来指定程序希望输出的字符集.
好比,用程序从一个utf8编码的数据库向另外一个gbk编码的数据库进行数据迁移,在选取源数据库数据之前,需要执行set names gbk,才能取到gbk编码的数据.

《MysqL教程MysqL字符编码设置问题》是否对您有启发,欢迎查看更多与《MysqL教程MysqL字符编码设置问题》相关教程,学精学透。内存溢出PHP学院为您提供精彩教程。

总结

以上是内存溢出为你收集整理的MYSQL教程mysql字符编码设置问题全部内容,希望文章能够帮你解决MYSQL教程mysql字符编码设置问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/1157548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存