• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

hex()返回不同的值,是编码设置的原因?解决办法

mysql 搞代码 7年前 (2018-05-31) 291次浏览 已收录 0个评论

hex()返回不同的值,是编码设置的原因?
相同的SQL:SELECT hex(‘好’);
我在phpMyAdmin环境下执行,返回的是:E5A5BD
我在mysql命令行下,返回的是:BAC3
我写个简单的存储过程,将结果写到表中,在mysql命令行下调用存储过程,插入的数据也是6位的

为什么这样?如何保持一致?
我想取4位的结果,可以减少文件的大小,对查询速度有影响吗?
4位的可以满足汉字/日文/韩文等非拉丁文的需求吗?

——解决方案——————–
为什么这样?字符集问题
show variables like ‘char%’;
——解决方案——————–
字符集设置的原因。

参考下贴中的检查方法,贴出你的字符集设置。
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码
——解决方案——————–
– 确切点说,我认为是客户端字符集影响的,因为你这个语句没有经过服务器,直接在客户端执行。
– “好”字的utf8是3字节存储数据的,所以hex结果是有“六位”。你可以使用ultraEditor等可以转换编码及查看十六进制的编辑器来测试各种编码下的对应十六进制。
– 要显示多语言的话,建议使用 utf8。当然,其实数据库里存放什么编码没关系,只要客户端能够解释你存储的数据就可以。
– 你说“在mysql命令行下调用存储过程,插入的数据也是6位的”,这时候已经和服务器打交道了,影响就不只是“客户端”的设置了,可能表或库的字符集就是 utf8 的。改成别的字符集就会变成别的位数。
– mysql 里可以用 convert 函数来转移字符编码,测试的时候很好用:

SQL code

 mysql> select hex(convert('好' using utf8)), convert('好' using utf8); +-------------------------------+--------------------------+ | hex(convert('好' using utf8)) | convert('好' using utf8) | +-------------------------------+--------------------------+ | E5A5BD | 好 | +-------------------------------+--------------------------+ 1 row in set (0.00 sec) mysql> select hex(convert('好' using gb2312)), convert('好' using gb2312); +---------------------------------+----------------------------+ | hex(convert('好' using gb2312)) | convert('好' using gb2312) | +---------------------------------+----------------------------+ | 3F3F | ?? | +---------------------------------+----------------------------+ 1 row in set (0.00 sec) mysql> select hex(convert('好' using latin1)), convert('好' using latin1); +---------------------------------+----------------------------+ | hex(convert('好' using latin1)) | convert('好' using latin1) | +---------------------------------+----------------------------+ | BAC3 | 好 | +---------------------------------+----------------------------+ 1 row in set (0.00 sec) 
------解决方案--------------------
在 windows 下,mysql 客户端还有一个“代码页”的影响,即这个 cmd 窗口右键->属性->选项,可以看到代码页面,它影响客户端的标准输入。
------解决方案--------------------
[mysql]

default-character-set=utf8
重新启动MYSQL服务

导出数据,在统一的字符集下重新建立表,再导入数据

欢迎大家阅读《hex()返回不同的值,是编码设置的原因?解决办法》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:hex()返回不同的值,是编码设置的原因?解决办法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址