字符集:一套符号和字符编码的集合。
Gbk utf8 latin1
校对规则:在字符串内用于比较字符的一套规则。
字符在数据库里有四个等级
服务器级:安装数据库时指定的
数据库级:建立database指定或者继承服务器级
数据表级:建立table时指定或者继承数据库级
Create table student3
(
Id int unsigned auto_increment primary_key,
Username varchar(20) not null unique key,
Nickname varchar(20)
)charset=gbk;这里指定了表的字符集。
字符级:建立数据表时定义字段指定的字符集或者继承表的字符集
Create table student4
(
Id int unsigned auto_increment primary key,
Username varchar(20) not null unique key,
Nickname varchar(20) character set utf8
)default character set gbk;这里同时指定表和字段的字符集。
因此我们根据我们的项目或网站,安装数据库时最好用我们定好的编码。比如utf8或gbk
客户端的字符集
Gbk编码
Insert into student4 values(null, ‘冯十’, ‘小冯’);
如果是utf8的系统客户端开启后会是乱码。
Show variable like ‘%char%’;查看关于编码的变量
Character_set_client 客户端使用的编码
Character_set_connection 数据库连接使用的编码
Character_set_results 返回结果使用的编码
这是三个变量的设置影响到数据是否是乱码。
更改变量set character_set_results=gbk;就不乱码了。
乱码解决方法设置character_set_results为正确的编码
进行插入是无法插入的可能因为编码不符导致的。因为客户端是gbk但是告诉服务器说是utf8编码,所以无法插入,变量character_set_client=utf8
解决方法:设置客户端编码的编码为正确的值。
Set character_set_client=gbk;
因此如果客户端这两个变量设置正确,那么无论是插入数据还是读数据都不会乱码。
拿php来说,你的php文件保存成什么格式,你的客户端就是什么编码格式
Character_set_connection 转码,不设置也没有,有点多余。
可以把上述三个变量合成一个
Set names gbk;
Set names utf8;
关于
Create table student4
(
Id int unsigned auto_increment primary key,
Username varchar(20) not null unique key,
Nickname varchar(20) character set utf8
)default character set gbk;
数据表字段的编码会不会影响客户端的数据插入和显示?
客户端不会出现乱码的情况,原因是数据库会根据客户端的编码进行正确的转换。
总结:
1 首先确认我们的客户端的编码,
2 根据客户端编码,用set names gbk或utf8设置编码
3 完成