字符集和校对规则(学习笔记)

  字符集:一套符号和字符编码的集合。

  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 完成

你可能感兴趣的:(数据库知识)