第七章 字符集和排序规则

7.1彻底搞定MySQL的乱码问题

1.什么是乱码?

乱码是指由于编码、解码过程中的不匹配或错误,导致文本或数据在显示或解读时出现无意义、混乱或不可读的字符序列。简单来说,当你打开一个文件或接收一段信息时,如果看到的字符不是预期的文字,而是一串无法理解的符号或乱码,这通常意味着信息的编码方式与你所使用的解码方式不一致。

7.2预备知识

——字符 character eg:abcd 1234,.()

——字符集合:charset一组字符

ASCII字符集合(7bit,最高位是0),标准的——可打印的

扩展Ascii字符集合(8bit)  拉丁语系,扩展----不可打印的字符  

GB2312   简体中文

  BIG5   繁体中文

  GBK   包含简体中文和繁体中文

- 字符编码  给字符集合中的每1个字符指定1个二进制数字来标识。

- 字符集:字符集合+编码=字符集

- 字符序:字符的排序规则   1个字符集,可以有多个排序规则即多个字符序

以_ci结尾,大小写不敏感,不区分大小写

以_cs结尾,大小写敏感,区分大小写

7.3常见的字符集

- Ascii字符集

- 扩展Ascii字符集   latin1   8位二进制  包括Ascii字符集中的全部字符

- GB2312  BIG5  GBK    16位二进制 

- unicode  字符集  全球语言   16位二进制

- 扩展Ascii字符集  latin1  latin2

- unicode字符集    unicode编码   一个字符2个字节

                             utf8    一个英文字符  占一个字节

                                      一个中文字符使3个字节

- utf8mb3   utf8mb4    more bit

- 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支持的字符集

语法:show character set;——查看mysql支持的字符集

show variables like'character_set%'_%’;——查看学前mysql字符集

character_set_client客户端字符

character_set_connection连接字符集

character_set_database数据库字符集

character_set_results返回结果的字符集

character_set_server服务器字符集

character_set_system系统字符集

创建数据库时,如果没有指定数据的字符集,则会使用服务器字符集。

创建表时,如果不指定表的字符集,则会使用数据库字符集。

创建表中字段时,如果不指定字符段的字符集,则会使用表的字符集。

7.6设置mysql字符集

7.6.1查看服务器和客服端字符集

show variables like'character_set_%';查看默认字符集

7.6.2修改mysql默认字符集

  • 临时修改

set names字符集名称;——临时修改

——提示:此方法可以临时修改3个字符集

character_set_client

character_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 db default charset lantin1;

7.72创建表时,指定表的默认字符集

create table student(sid int,sname char(30))default charset utf8;

7.73创建列(字段)时,指定列(字段)的字符集

create table student1(sid int,sname char(30),address char(20) character set latin1)default charset utf8;

回忆:

  • 创建数据库时,如果不指定默认字符集,就会使用服务器字符集character_set_server
  • 创建表时,如果不指定表的默认字符集,就会使用数据库字符集

character_set_datbase

  • 创建列时,如果不指定列的字符集,就会使用表的字符集

7.8修改数据库、表和列的字符集

7.8.1修改数据库的字符集

语法:

alter database db character set'lantin1';

结论:

更改数据库的默认字符集对已存在数据库中的表没有影响,但是会影响新建表的默认字符集。

7.8.2修改表的字符集

语法:

alter table student1 character set'utf8';

结论:修改表的默认字符集,对表中现有的字符集没有影响,但是会影响在表中新插入列的默认的字符集。

7.8.3修改表中列的字符集

语法:

alter table student1 cgange dz dz char(20)character set 'lantin1';

7.9指定客户端使用的字符集

语法:

set names latin1;

7.10字符集的兼容性

结论:utf8兼容latin1

GBK兼容utf8

更改数据库字段字符集 由latin1可以转换为utf8;由utf8转换为latin1,汉字会变为??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值