MySQL中数据库的默认字符集和校对规则有哪些

MySQL中数据库的默认字符集和校对规则有哪些,第1张

1 ASCII

用途:用来映射简单的单字节字符,比如大小写英文字母、阿拉伯数字、常用的标点符、运算符、控制字符等。

编码范围:U+0000 - U+007F

注意:对于用这类字符的场景够用了,但是却无法表达比如汉字,日文等编码。

2 UNICODE

用途:用来映射包含 ASCII 以内的其他的所有字符。

编码范围:U+0000 - U+10FFFF

注意:ASCII 是 UNICODE 的子集,ASCII 编码的字符可以无损转换为 UNICODE 编码的字符。

MySQL 常用字符集

1 Latin1

Latin1 是 cp1252 或者 ISO-8859-1 的别名。ISO-8859-1 编码是单字节编码,向下兼容 ASCII。

编码范围:U+0000 - U+00FF

ISO-8859-1 收录的字符除 ASCII 收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。

单字节内的空间都被 ISO-8859-1 编码占用,所以能够用 ISO-8859-1 编码存储、传输其他任何编码的字节流。

比如把一个 Utf8mb4 的编码或者 GBK 的编码存入 Latin1,不会有任何问题。因为 Latin1 保留了原始的字节流,这也就是 MySQL 长期以来把 Latin1 做默认字符集的原因。

但是由于 Latin1 对任何字符都存放字节流,造成了字符个数的浪费。

比如:

CHAR(10) CHARACTER SET LATIN1;CHAR(10) CHARACTER SET UTF8;

该字段中存储字符个数 UTF8 是 Latin1 的三倍!!!

2 GB18030

GB18030 是中国官方标准字符集,向前兼容 GBK、GB2312,是这两个的超集。用 1、2、4 个字节分别表示一个符号。比如对一般中文字符,默认是用两个字节编码存储。Windows 系统,默认用的就是 GB18030。

若只是存储中文字符,那 GB18030 最佳。

原因有两点:

1)占用空间小,比如比 UTF8 小。

2)存储的汉字根据拼音来排序,检索快。

3 UTF8

UTF8 是 Unicode 的编码实现,可以存储 UNICODE 编码对应的任何字符, 这也是使用最多的一种编码。最大的特点就是变长的编码方式,用 1 到 4 个字节表示一个符号,可以根据不同的符号编码字节长度。

字母或数字用 1 字节,汉字用 3 字节,emoji 表情符号用 4 字节。UTF8 字符集目前是使用最广泛的。

注意!MySQL 里常说的 UTF8 是 UTF8MB3 的别名,UTF8MB3 是 UTF8MB4 的子集,UTF8MB4 才是真正的 4 字节 UTF8 字符集!

UTF8MB3 表示最大支持 3 个字节存储字符,UTF8MB4 表示最大 4 个字节存储字符。根据实际需要和未来展望,MySQL 80 已经默认用 UTF8MB4 基础字符集。

关键字:字符集gbkutf8开始表W的字符集设置成了gbk,但是现在的建的表要求字符集为utf8。于是:alter table `W` default character set utf8;或者ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;但是发现其中一个字段CONTENT的字符集还是gbk。于是更改mysql数据库表中某个字段的字符集,修改字段的定义:alter table `W` modify column `CONTENT` varchar(30) character set utf8 not null;

首先这是我一开始的Ubuntu 下MySQL默认字符集(下图),在Java中输入中文到数据库中全是乱码问号,MySQL不识别,是因为MySQL默认的字符集是latin1(ISO_8859_1)不是utf8的字符集。

修改方法:

1打开mycnf文件进行修改(这里注意下,MySQL版本是55以上的,以下版本应该也通用,具体没有测试过,但在55以上的绝对可行)

sudo gedit /etc/mysql/mycnf

2在[mysqld]下添加如下代码(对于55以上版本,[mysqld]的default字符集设置已经是遗弃的参数,可以使用这几个,具体查看相应版本的手册)

character-set-server=utf8

collation-server=utf8_general_ci

skip-character-set-client-handshake

3退出重启mysql服务

sudo service mysql restart

4进入mysql查看字符集

mysql> show variables like 'collation_%';

mysql> show variables like 'character_set_%';

查看MySQL编码

SHOW VARIABLES LIKE 'char%';

因为当初安装时指定了字符集为UTF8,所以所有的编码都是UTF8。

character_set_client:你发送的数据必须与client指定的编码一致!!!服务器会使用该编码来解读客户端发送过来的数据;

character_set_connection:通过该编码与client一致!该编码不会导致乱码!当执行的是查询语句时,客户端发送过来的数据会先转换成connection指定的编码。但只要客户端发送过来的数据与client指定的编码一致,那么转换就不会出现问题;

character_set_database:数据库默认编码,在创建数据库时,如果没有指定编码,那么默认使用database编码;

character_set_server:MySQL服务器默认编码;

character_set_results:响应的编码,即查询结果返回给客户端的编码。这说明客户端必须使用result指定的编码来解码;

控制台编码

修改character_set_client、character_set_results、character_set_connection为GBK,就不会出现乱码了。但其实只需要修改character_set_client和character_set_results。

控制台的编码只能是GBK,而不能修改为UTF8,这就出现一个问题。客户端发送的数据是GBK,而character_set_client为UTF8,这就说明客户端数据到了服务器端后一定会出现乱码。既然不能修改控制台的编码,那么只能修改character_set_client为GBK了。

服务器发送给客户端的数据编码为character_set_result,它如果是UTF8,那么控制台使用GBK解码也一定会出现乱码。因为无法修改控制台编码,所以只能把character_set_result修改为GBK。

修改character_set_client变量:set character_set_client=gbk;

修改character_set_results变量:set character_set_results=gbk;

设置编码只对当前连接有效,这说明每次登录MySQL提示符后都要去修改这两个编码,但可以通过修改配置文件来处理这一问题:配置文件路径:D:\Program Files\MySQL\MySQL Server 51\ myini

如果mysql默认字符集是gbk,而创建数据库时没指定字符集为utf-8,那么数据库默认字符集为gbk,同理数据库的表也一样。

create database 数据库名 character set utf8;

CREATE TABLE message(

id int(10) auto_increment PRIMARY KEY NOT NULL,

username VARCHAR(20) NOT NULL,

message VARCHAR(1024) NOT NULL,

time datetime NOT NULL )

ENGINE= MYISAM CHARACTER SET utf8 ;

>

项目用到mysql,但是从数据库中读取数据库中读取的数据中文乱码,然后排查出是因为mysql字符集设置有问题,在这里总结一下mysql如何设置默认字符集

>

以上就是关于MySQL中数据库的默认字符集和校对规则有哪些全部的内容,包括:MySQL中数据库的默认字符集和校对规则有哪些、mysql中怎么修改某一数据库的默认字符集、mysql5.5怎么更改数据库默认字符集等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9288805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存