mysql建库 编码形式 排序选择

结论:

一般mysql编码形式选择:

utf8mb4

一般mysql排序选择:

utf8mb4_unicode_ci

具体原因:(感谢马老师)

mysql关于编码格式的区别:

Mysql的utf8mb4,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别-马育民老师 (malaoshi.top)

字符编码的区别:

ASCII、GBK、Unicode、UTF-8编码(字符集)-马育民老师 (malaoshi.top)

具体内容:

utf8mb4介绍

MySQL 5.5.3之后增加了utfmb4字符编码
支持BMP(Basic Multilingual Plane,基本多文种平面)和补充字符
最多使用4个字节存储字符

为什么提出utf8mb4

UTF-8:是使用1~4个字节,一种变长的编码格式,字符编码。

mysql 的 UTF-8:编码最大字符长度为 3 字节,包含了大多数字符
如果遇到 4 字节的宽字符就会发生错误。如 emoji表情 和 一些生僻汉字

utf8mb4的含义

mb4:即 most bytes 4,使用4个字节来表示完整的UTF-8。

utf8mb4 是utf8的超集并完全兼容utf8,能够用四个字节存储更多的字符。

utf8mb4_bin

将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

utf8mb4_general_ci

ci即case insensitive,不区分大小写。没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

是一个遗留的 校对规则,不支持扩展,它仅能够在字符之间进行逐个比较。utf8_general_ci校对规则进行的比较速度很快,但是与使用 utf8mb4_unicode_ci的校对规则相比,比较正确性较差。

utf8mb4_unicode_ci

是基于 标准 的 Unicode 来排序和比较,能够在各种语言之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

utf8mb4_general_ci VS utf8mb4_unicode_ci

准确性:

  • utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
  • utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。

但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

性能

  • utf8mb4_general_ci在比较和排序的时候更快
  • utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。

编码的区别:

ASCII编码

计算机是美国人发明的,最早只有 127个字符 被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为 ASCII编码

一个字节最大是255,大于字符总数127,ASCII码,一个字符占一个字节

GBK编码

中国汉字有几万个,常用汉字几千个,一个字节最大是255,不够存储汉字,至少需要2个字节(最大整数是65535),还不能和ASCII编码冲突,所以,为了存储汉字,制定了GB2312、GBK编码, 1个汉字占2个字节 (GB2312不常用了)

Unicode编码

计算机使用越来越普及,全世界的语言文字有很多,各个国家都会像中国指定自己文字的编码,为了 支持各国文字,提出Unicode编码。

Unicode把 所有语言文字 都统一到一套编码里,这样就不会再有 乱码 问题了

在Unicode中,最常用的字符,是 两个字节 表示 一个字符 (如果要用到 非常偏僻 的字符,就需要 4个字节 甚至更多)

UTF-8

使用Unicode编码后,可以解决各国文字的问题,但 两个字节 表示 一个字符 ,也会带来新的问题:

如果文本全是 英文 ,用 Unicode编码 比ASCII编码 需要 更多的空间

注意:在网络传输、存储到硬盘时劣势更加明显

为了解决上面问题,提出 UTF-8编码,是一种变长的编码方式,把一个Unicode字符编码成 1-6个 字节:

  • ASCII码仍然是 1个字节
  • 常用汉字通常是 3个字节,生僻汉字占用4个字节
  • 很生僻的字符被编码成4-6个字节

这样就能节省大量空间

内存和文件(网络传输)的编码方式

  • 在计算机内存中,统一使用Unicode编码
  • 保存到硬盘(网络传输)时,转换为UTF-8编码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值