Mysql:插入中文失败,校对集问题(数据比较的方式)、Web乱码问题

目录

插入中文失败

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

 Web乱码

 

插入中文失败

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

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

原因是:客户端与服务端编不统一问题;服务器没有识别对应的四个字节:服务器认为数据是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来做

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值