美文网首页
MySQL字符集

MySQL字符集

作者: 唯爱熊 | 来源:发表于2019-11-30 14:29 被阅读0次

一.字符集介绍

什么是字符集(Charset)

字符集:是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

1.gbk/gb2312
gbk/gb2312
采用双字节字符集,不论中、英文字符均使用双字符来表示,为了区分中文,将其最高位都设定成1
gb2312是gbk的子集,gbk是gb18030的子集,gb2312仅能存储简体中文字符
gbk包括中日韩字符的大字符集
通常使用gbk字符集足够
国际通用性比utf8差,不过utf8占用的数据库比gbk大(utf8是三字节字符集)
2.utf8/utf8mb4
UTF全称(Unicode Transformation Format),是Unicode的一种存储方式,可变长度字符编码,又称万国码
数据库字符集尽量使用utf8(包括 connect、result、及最终html页面都必须要求一致为utf8)
UTF8使用可变长度字节来存储 Unicode字符,例如 ASCII字母继续使用1个字节存储,重音文字、希腊字母、或西里尔字母等使用2个字节来存储,而常用的汉字就要用3个字节;也就是一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
utf8mb4一个字符最多能存4字节,所以能支持更多的字符集;项目中常用utf8mb4存放emoji表情

latin1
是8bit (1 bytes)字符集,但不能覆盖亚洲、非洲语言
unidoce是latin1的扩展,增加了亚洲、非洲常规语言支持,但仍不支持全部语言,且ASCII用unidoce来表示效率不高(小字符集转换成大字符集,往往便随的就是字符的丢失)
utf8是unicode的扩展
gbk、gb2312等字符集与utf8之间都必须通过Unicode编码才能相互转换

二.字符集使用建议

字符集查看和校验值查看命令

mysql> show charset;
mysql> show collation;

1、非常肯定只有中文终端用户时,可选择gbk / gb2312
2、为了方便数据迁移、以及多种终端展示,最好是utf8
3、字符无需区分大小写时,采用默认的xx_ci校验集可以,否则选择xx_bin或cs校验集(生产环境中,尽量不要修改校验集)
4、默认字符集是latin1,该字符集存放汉字是分开存放,以至于检索结果时不够精确,好处就是节省空间,不推荐使用

三.Mysql字符集的范围和优先级

字符集范围
服务器层(server) > 数据库成(database) > 数据表(table) > 字段(column) > 连接(connection) | 结果集(result)
字符集优先级
连接(connection) | 结果集(result) > 字段(column) > 数据表(table) > 数据库成(database) > 服务器层(server)

四.字符集设置

1.操作系统级别
1)CentOS 6.x 版本
[root@db01 ~]# vim /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
2)CentOS 7.x 版本
[root@db01 ~]# vim /etc/locale.conf 
LANG="en_US.UTF-8"
2.MySQL实例级别

方法一:编译安装时指定

cmake . 
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \

方法二:配置文件中设定字符集。

vim /etc/my.cnf 
[mysqld]
character-set-server=utf8
3.库别级别的字符集设置
#库级别的字符集
mysql> create database oldboy charset utf8;
#表级别的字符集
mysql> create table mysql.oldboy(id int)charset utf8;
4.其它的修改字符集的方式
1.临时生效
mysql> set character_set = 'gbk';
mysql> set character_set_client = 'gbk';
2.全局生效
mysql> set global character_set_client = 'gbk';
Query OK, 0 rows affected (0.00 sec)

五.常用的数据类型

#整型
int         -2^31 ~ 2^31-1
tinyint     -128 ~ 127
#字符串类型
char        定长   
char(N):N代表的是字符个数(也叫字符长度)、而非bytes
char(N):是固定长存储,占用定长的存储空间,不足的部分用空格填充;MySQL处理char(N)类型时,需要将空格strip掉后return。
存储空间:char(N)类型的存储空间和字符集有关系,结合刚才字符集的知识点,一个中文在utf8字符集中占用3个bytes、gbk占用2个bytes、数字和字符统一用一个字符表示。
存储机制:在不够N长度时,MySQL在存储数据时,需要用填充特殊的空格,而非十六进制的20
varchar 变长
varchar(N):N代表的是字符个数(也叫字符长度)、而非bytes
varchar(N):是变长存储,仅使用必要的存储空间.
存储空间:varchar(N)类型的存储空间和字符集有关系,结合刚才字符集的知识点,一个中文在utf8字符集中占用3个bytes、gbk统一占用2个bytes、数字和字符一个字符表示。
存储机制:varchar(N)字段存储实际是从第二个字节开始存储,然后用1到2个字节表示实际长度,剩下的才是可以存储数据的范围,因此最大可用存储范围是65535-3=65532字节;第一个字节标识是否为空.(长度小于255字节,使用一个字节来表示长度;大于255字节使用两个字节来表示长度)
#枚举类型
enum
#日期类型
datetime
timestamp

相关文章

  • 字符集与校对规则

    MySQL字符集及校对规则的理解 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 ...

  • MySQL字符排序

    关于MySQL字符集 可以参考文章MySQL字符集 & 重谈MySQL字符集 目录 大小写 比较规则 大小写 _c...

  • Mysql全备、增量备份及恢复

    Mysql字符集 MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,...

  • MySQL常见问题汇集

    字符集mysql 字符集(CHARACTER SET)和校对集(COLLATE)mysql 中 character...

  • Mysql字符集设置

    mysql字符集编码

  • 八、MySQL字符集

    字符集和排序规则简介   MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL...

  • MySQL乱码问题

    MySQL字符集参数 MySQL参数使用 影响到字符编码的设置 数据库级别的字符集信息使用db.opt来存放字符集...

  • 字符集

    定义 mysql 的字符集包括 字符集 CHARACTER 和 校对规则COLLATION 两个概念 字符集 : ...

  • mysql 字符集设置查看

    1.列出MYSQL支持的所有字符集:SHOW CHARACTER SET; 2.当前MYSQL服务器字符集设置SH...

  • MYSQL字符集设置

    MYSQL的Workbench设置字符集失败,可以用以下命令行方式设置MYSQL字符集: 在my.cnf中设置: ...

网友评论

      本文标题:MySQL字符集

      本文链接:https://www.haomeiwen.com/subject/gcsowctx.html