MySQL - 常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci和存储字符集 utf8 和 utf8

这篇具有很好参考价值的文章主要介绍了MySQL - 常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci和存储字符集 utf8 和 utf8。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在创建数据库时,我们经常会需要填写数据库名、字符集、排序规则

常用的存储字符集 utf8 和 utf8mb4

排序字符集 utf8mb4_unicode_ci 和 utf8mb4_general_ci、utf8mb4_bin、utf8mb4_0900_ai_ci

utf8mb4和utf8mb4_general_ci,数据库DataBase,mysql

一、存储字符集 utf8 和 utf8mb4

1、utf8

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符,也就是 Unicode 中的基本多文本平面

2、utf8mb4

要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8。对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR

总结:

UTF-8是使用1~4个字节,一种变长的编码格式,字符编码。mb4即 most bytes 4,使用4个字节来表示完整的UTF-8

mysql的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等

MySQL的utf8是utfmb3,只有三个字节,节省空间但不能表达全部的UTF-8。所以推荐使用utf8mb4(是utf8的超集并完全兼容它,能够用四个字节存储更多的字符,这几乎包含了世界上所有能看到见的语言。)。

二、排序字符集

utf8mb4_unicode_ci 和 utf8mb4_general_ci、utf8mb4_bin、utf8mb4_0900_ai_ci

MySQL常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin_ci

ci 是 case insensitive,不区分大小写,即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的。
bin 是二进制, a 和 A 会别区别对待(例如运行SELECT * FROM table WHERE txt = 'a', 那么在utf8mb4_bin中就找不到 txt = 'A' 的那一行, 而 utf8mb4_general_ci 则可以)

1、utf8mb4_unicode_ci

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

2、utf8mb4_general_ci

是一个遗留的 校对规则,不支持扩展,它仅能够在字符之间进行逐个比较

不区分大小写, utf8mb4_general_cs 区分大小写

utf8_general_ci校对规则进行的比较速度很快,但是与使用 utf8mb4_unicode_ci的校对规则相比,比较正确性较差

3、utf8mb4_bin:

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

4、utf8mb4_0900_ai_ci:

MySQL 8.0 默认的是 utf8mb4_0900_ai_ci,属于 utf8mb4_unicode_ci 中的一种,具体含义如下

uft8mb4 表示用 UTF-8 编码方案,每个字符最多占 4 个字节

0900 指的是 Unicode 校对算法版本(Unicode 归类算法是用于比较符合 Unicode 标准要求的两个 Unicode 字符串的方法)

ai 指的是口音不敏感。也就是说,排序时 e,è,é,ê 和 ë 之间没有区别

ci 表示不区分大小写。也就是说,排序时 p 和 P 之间没有区别

utf8mb4 已成为默认字符集,在 MySQL 8.0.1 及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则

以前,utf8mb4_general_ci 是默认排序规则。由于 utf8mb4_0900_ai_ci 排序规则现在是默认排序规则,因此默认情况下新表格可以存储基本多语言平面之外的字符。现在可以默认存储表情符号。如果需要重音灵敏度和区分大小写,则可以使用 utf8mb4_0900_as_cs 代替。

utf8mb4_unicode_ci 和 utf8mb4_general_ci 的区别

1、准确性

utf8mb4_unicode_ci 是基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序

utf8mb4_general_ci 没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致

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

2、性能

utf8mb4_general_ci 在比较和排序的时候更快

utf8mb4_unicode_ci 在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

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

【1】对于一种语言仅当使用 utf8mb4_unicode_ci 排序做的不好时,才执行与具体语言相关的utf8mb4字符集校对规则。例如,对于德语和法语,utf8mb4_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8mb4校对规则

【2】utf8mb4_general_ci 也适用德语、法语或者俄语,但会有不准。如果你的应用能够接受这些,那么应该使用 utf8mb4_general_ci,因为它速度快。否则,使用utf8mb4_unicode_ci,因为它比较准确

虽然推荐用 utf8mb4_unicode_ci,但是用 utf8mb4_general_ci 也没啥问题

因为utf8mb4_unicode_ci比较准确,utf8mb4_general_ci速度比较快。通常情况下,新建数据库 和 建 varchar字符集类型字段 时一般选用 utf8mb4_general_ci 就可以文章来源地址https://www.toymoban.com/news/detail-697255.html

到了这里,关于MySQL - 常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci和存储字符集 utf8 和 utf8的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL排序规则之utf8mb4_0900_ai_ci

    是什么? utf8mb4_0900_ai_ci 是mysql8.0之后的数据库的一种排序规则(collation)。 如何理解? utf8mb4,这个名字许多人大概熟悉。如今️✈️♥️emoji表情已经大量使用,但MySQL之前的的字符集(character set)是utf8(更准确的名字是utf8mb3,一个字符最多使用3个字节来存储),只能存储编码

    2024年02月03日
    浏览(41)
  • mysql设置了utf8mb4,为什么还有utf8mb4_general_ci和utf8mb4_0900_ai_ci?

    前段时间,遇到一个mysql的问题,我仔细看看报错信息,应该是MySQL数据库报出来的,大意是说:collation不兼容,一个是 utf8mb4_0900_ai_ci,另一个是utf8mb4_general_ci。 utf8mb4_general_ci这玩意儿我见过,是针对utf8mb4编码的collation,但是utf8mb4_0900_ai_ci是啥,我也没见过。 于是我问他,

    2024年02月10日
    浏览(60)
  • 【MySQL】报错1267 - Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPL

    记录一次sql语句执行错误: left join表会出现 Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_croatian_ci,IMPLICIT) for operation \\\'=\\\'错误. 这是由于表的编码格式不一致 例如 某个表的字符编码为utf8_general_ci而关联表的字符编码为utf8_croatian_ci导致当前错误! 解决方案: 让关联表的字符编

    2024年02月11日
    浏览(40)
  • MySQL执行异常: Illegal mix of collations (utf8mb4_0900_ai_ci IMPLICIT) and (utf8mb4_general_ci...

    Mysql生产库存储过程升级后执行报错:SQL错误( 1267 ) : Illegal mix of collations (utf8mb4_0900_ai _ci IMPLICIT) and (utf8mb4_general_ci IMPLICIT) for operation ‘=’。根据错误提示,报错原因应该是=号两侧内容的排序规则(collation)不一致导致的报错。 产生这个问题一种情况是两个字段的排序规则不

    2024年02月16日
    浏览(39)
  • MySQL提示Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)

    根据错误提示,报错原因应该是=号两侧内容的排序规则(collation)不一致导致的报错。 原sql中出现了: status !=\\\'取消\\\' 原因是:表字段的排序规则为utf8mb4_0900_ai _ci,而字面常量是排序规则是utf8mb4_general_ci  collation_connection用于字面常量比较,如果字段比较会使用字段或表声明

    2024年01月18日
    浏览(44)
  • utf8mb4的utf8mb4_0900_ai_ci如何理解?mysql新建库如何选择字符集?

    MySQL字符集详解_永远是少年啊的博客-CSDN博客_mysql 字符集 今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL字符集。一、MySQL字符集简介二、查看和设置MySQL字符集(一)查看当前字符集设置(二)更改默认字符集(三)在创建表时指定字符集三、更改MySQL字符集 https:

    2024年02月09日
    浏览(232)
  • MySQL报错 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘

    MySQL报错如下 原因 : 我这里SQL文件对应的MySQL版本是8.0版本,我本地是5.7版本,高级往低级导入时 版本不兼容 ,引发了1273错误。 解决方法 : 将文件中的所有 utf8mb4_0900_ai_ci 替换为 utf8_general_ci ,同时将 utf8mb4 替换为 utf8 。

    2024年02月11日
    浏览(45)
  • mysql出现错误 ‘utf8mb4_0900_ai_ci‘ 或 ‘utf8_0900_ai_ci‘

    1:在我们使用mysql数据库,进行日常开发的过程中,会经常进行导入导出的操作 2:在使用mysql工具或者使用第三方数据库管理工具,进行数据库导入运行SQL脚本的时候,出现这种错误。 或者 \\\"utf8_0900_ai_ci\\\" 错误 ,均是数据库版本从高版本导入到低版本导致的。 解决方案有两

    2024年02月13日
    浏览(46)
  • Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说

    概要 主旨是为了研究mysql里的字符集,在实践中发现中文的排序顺序有点问题,为了能让中文排序正常,尝试更改各种字符集做测试。 Mysql官方版本8.0以前默认的应该是latin1,8.0后默认为utf8mb4了 Docker安装Mysql docker拉取Mysql官方镜像站地址:https://hub.docker.com/_/mysql docker可以一键

    2024年01月22日
    浏览(41)
  • 【MySQL异常解决】MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案

    从服务器MySQL中导出数据为SQL执行脚本后,在本地电脑执行导出的SQL脚本, 报错: Unknown collation ‘utf8mb4_0900_ai_ci‘ 打开SQL脚本,查看 utf8mb4_0900_ai_ci ,这是字段的字符集。 1、MySQL 版本不一样; 2、utf8mb4_0900_ai_ci 在 MySQL 8 以下是不被支持的,检查发现本地数据库为5.7,

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包