Mysql:插入中文失败,校对集问题(数据比较的方式)、Web乱码问题
发布日期:2021-05-07 14:07:59 浏览次数:17 分类:原创文章

本文共 1122 字,大约阅读时间需要 3 分钟。

目录





 


插入中文失败



中文数据问题本质就是字符集问题


计算机识别二进制:人类更多是识别符号:需要由两个二进制与字符的对应关系(字符集)


原因是:客户端与服务端编不统一问题;服务器没有识别对应的四个字节:服务器认为数据是UTF8,一个汉字有三个字节:读取三个字节转化成汉字(失败),剩余的读在读取三个字节(不够):最终失败


GBK:2个字节数是一个汉字


UTF-8:3个字节数是一个汉字


分析:


1、查看服务器支持哪些字符集


show character set:


2、查看服务器默认对外处理的字符集


show variables like 'character_set%'



3、问题根源:客户端数据只能是GBK,而服务器认为是UTF_8:矛盾产生



  • 解决方案:改变服务器,默认的接受字符集为GBK:

  • Set character_set_client = gbk;


4、connection连接层字符集:是字符集转变的中间着,如果统一效率更高,不统一也没有问题


5、插入中文查看数据效果:依然是乱码:



  • 原因:数据来源是服务器,解析数据时客户端(客户端只识别GBK::只会两个字节一个汉字);但是事实服务器给的数据却是UTF8,三个字节一个汉字:乱码)

  • 解决方案:修改服务器给客户端的数据字符集为GBK

  • Set character_set_results=GBK:


注意:


Set 变量 =值:修改只是会话级别(当前客户端,当次连接有效:关闭无效)


设置服务器对客户端的字符集的认识:可以使用快捷方式:set names 字符集


set names gbk;



校对集问题(数据比较的方式)



校对集有三种方式



  • _bin:binary,二进制比较,去除二进制,一位一位的比较,区分大小写

  • _cs:case sensitive,大小写铭感,区分大小写

  • _ci:case insensitice,大小写不敏感,不区分大小写


查看数据库支持的校对集 :show collation;



  • yes;代表默认不支持大小写

  • 校对集应用:只有数据产生比较的时候,校对集才会生效

    • 数据进行比较:根据某个字段进行比较:order by 字段名[asc|desc] asc/升序,desc/降序



注意:校对集:必须咋没有数据之前声明好,如果有了数据,在进行校队集,那么修改无效



 Web乱码



动态乱码网站由三个部分构成:浏览器,apache服务器(PHP),数据库服务器,三个部分都有自己的字符集(中文),数据需要在三个部分之间来回传递:很容易产生乱码


解决问题:统一编码(三码合一)



  • 但是事实上不可能:浏览器是用户管理(根本不可能控制)

  • 但是必须要解决这些问题:主要是靠PHP来做



上一篇:Python:高阶函数,柯里化Currying
下一篇:Python:bytes、bytearray

发表评论

最新留言

不错!
[***.144.177.141]2025年04月09日 08时55分54秒