7.1彻底搞定MySQL的乱码问题
什么是乱码?
乱码是指由于编码、解码过程中的不匹配或错误,导致文本或数据在显示或解读时出现无意义、混乱或不可读的字符序列。简单来说,当你打开一个文件或接收一段信息时,如果看到的字符不是预期的文字,而是一串无法理解的符号或乱码,这通常意味着信息的编码方式与你所使用的解码方式不一致。
7.2预备知识
——字符 character eg:abcd 1234,.()
——字符集合:charset一组字符
ASCII字符集合(7bit,最高位是0),标准的——可打印的
扩展Ascii字符集合(8bit) 拉丁语系,扩展----不可打印的字符
GB2312 简体中文
BIG5 繁体中文
GBK 包含简体中文和繁体中文
- 字符编码 给字符集合中的每1个字符指定1个二进制数字来标识。
- 字符集:字符集合+编码=字符集
- 字符序:字符的排序规则 1个字符集,可以有多个排序规则即多个字符序
以_ci结尾,大小写不敏感,不区分大小写
以_cs结尾,大小写敏感,区分大小写
7.3常见的字符集
utf-8是一种变长的字节编码方式,对于某一个字符的utf-8编码,如果只有一个字节则其最高位二进制位为0;如果是多字节,其第一个字符节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头,utf8最多可以用到6个字节。
示例:
1字节 0xxx xxxx
2字节 110x xxxx 10xx xxxx
3字节 1110 xxxx 10xx xxxx 10xx xxxx
4字节 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
5字节 1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
6字节 1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
刘
1110 0101 1000 1000 1001 1010
E58896
A
0100 0001
41
示例:
新建文本文件,使用utf-8编码来保存,验证字符的字节数。
GBK字符集,一个英文占1个字节,一个汉字占2个字节。
7.4mysql支持的字符集
语法:
7.6设置mysql字符集
7.6.1查看服务器和客服端字符集
show variableslike'character set %';查看默认字符集
7.6.2修改mysql默认字符集
临时修改
set names字符集名称;--临时修改
提示:此方法可以临时修改3个字符集
character set clientcharacter set connection
character set results
set character set database=utf8;使用此方法分别修改
永久修改--修改配置文件
windows server my.ini
linux my.cnf
重要提示:修改配置文件后,必须重启mysql服务
net start mysql;
net stop mysql;
7.7指定数据库和表以及字段的字符集
7.7.1创建数据库时,指定数据库的默认字符集create database dbdefault charset lantin1;
7.7.2创建表时,指定表的默认字符集
create tablestudent(sid int,sname char(30))default charset utf8;
7.7.3创建列(字段)时,指定列(字段)的字符集
create tablestudent1 (sid int,sname char(30),address char(20) character set latin1)defaultcharset utf8.回忆:
创建数据库时,如果不指定默认字符集,就会使用服务器字符集characterset server
创建表时,如果不指定表的默认字符集,就会使用数据库字符集character set datbase
创建列时,如果不指定列的字符集,就会使用表的字符集
7.8修改数据库、表和列的字符集
7.8.1修改数据库的字符集
语法:
alter database dbcharacter set'lantin1';
结论:
更改数据库的默认字符集对已存在数据库中的表没有影响,但是会影响新建表的默认字符集。
7.8.2修改表的字符集
语法:
alter table student1character set'utf8';
结论:修改表的默认字符集,对表中现有的字符集没有影响,但是会影响在表中新插入列的默认的字符集7.8.3修改表中列的字符集
语法:
alter table student1cgange dz dz char(20)character set "antin1';
7.9指定客户端使用的字符集
语法:
set nameslatin1;
7.10字符集的兼容性
结论:utf8兼容latin1
GBK兼容utf8
更改数据库字段字符集 由latin1可以转换为utf8;由utf8转换为latin1,汉字会变为??