嗯。。。。。。
上一篇讲到中文数据问题,只是做了一个实例,然而并没有成功,那么我们接着来解决这个问题。。。。
-
中文数据问题
计算机最先识别自己支持的字符集
服务器识别39种字符集,所以自然会有一种是和人打交道的,所以我们就得查看一下服务器默认对外处理的字符集
所以我们可以得出结论,中文数据创建不成功的根源就是:客户端数据只能是GBK,而服务器认为是utf8,所以产生矛盾。所以我们的解决方案是,改变服务器,将默认接收字符集改变为GBK:
修改了字符集之后呢,我们在插入一条中文数据试试能不能成功
插入数据成功之后,我们查看一下效果:
我们已经修改了废物我默认接收的字符集,为什么插入的数据是乱码呢?原因就是,数据的来源是服务器,而解析数据的是客户端,客户端只能识别GBK(两个字节一个汉字),而服务器给的数据却是UTF8(三个字节一个汉字),所以会出现乱码问题。
所以我们需要修改客户端给服务器的数据字符集为GBK:
需要注意的是,set设置的字符集只在当前打开的数据库有效,关闭当前数据库,在重新打开,又得重新设置,但是每次这样配置都很麻烦,所以,我们可以 使用快捷方式:
大家观察就可以发现,直接使用set names gbk;命令相当于一次性修改了character_set_cline、character_set_connection和character_set_results三个字符集connection连接层是字符集转变的中间层,如果能够统一效率更高,但是不统一也没有什么影响。
校对集(数据的比较方式)
校对集的三种格式:
_bin:binary,二进制比较,取出二进制位,从左往右比,先遇到谁谁就大,区分大小写
_cs:case senstive,大小写敏感,区分大小写。
_ci:case insensitice,大小写不敏感,不区分大小写。(默认校对集)
我们先来查看一下数据库到底支持哪些校对集
查看出来,总共有197种,我只截取了其中一部分。
那么校对集有什么用处呢?上面已经提到了,校对集是数据的比较方式。,因此,只有当数据产生比较时,校对集才会生效。