utf8mb4的utf8mb4_0900_ai_ci如何理解?mysql新建库如何选择字符集?

这篇具有很好参考价值的文章主要介绍了utf8mb4的utf8mb4_0900_ai_ci如何理解?mysql新建库如何选择字符集?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL字符集详解_永远是少年啊的博客-CSDN博客_mysql 字符集今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL字符集。一、MySQL字符集简介二、查看和设置MySQL字符集(一)查看当前字符集设置(二)更改默认字符集(三)在创建表时指定字符集三、更改MySQL字符集https://blog.csdn.net/weixin_40228200/article/details/122140283mysql字符集查看与设置_Hehuyi_In的博客-CSDN博客_mysql查看字符集的设置是一、查看 MySQL 数据库服务器和数据库字符集mysql> show variables like '%char%';+--------------------------+-------------------------------------+------| Variable_name | Value ...https://blog.csdn.net/Hehuyi_In/article/details/96326737mysql设置了utf8mb4,为什么还有utf8mb4_general_ci和utf8mb4_0900_ai_ci?https://www.cnblogs.com/seasonhu/p/14994857.htmlMySQL Workbench使用图文教程 - 简书MySQL Workbench是下一代的可视化数据库设计、管理的工具。之前已经记录了其安装得过程:window7安装Windows MySQL Workbench图文教程:h...https://www.jianshu.com/p/c3dcd4d9ce69

如何根据业务选择字符集,见第一篇。

如何修改字符集,见第一、二篇。

新建库经常选utf8mb4_0900_ai_ci或utf8mb4_bin,如何理解utf8mb4_0900_ai_ci?这一点本文重点参考第三篇文章( https://www.cnblogs.com/seasonhu/p/14994857.html)。

Q:

使用mysql可能会遇到collation不兼容的问题,一个是 utf8mb4_0900_ai_ci,另一个是utf8mb4_general_ci。

创建数据库时也有字符集选择的困惑。

A:

使用老版本mysql,可能会用utf8(utf8mb3)比较多,但mysql语境下的utf8与其他语境中提到的utf-8有些差别,即它最大只支持三个字节,只能存储编码值从0x000到0xFFFF之间的字符。

如果要存储表情文字,比如✈️♥️这类,按照UTF-8规则,则需要四个字节,那么mysql中就需要用utf8mb4这个字符集来支持。

想理解collation如何选择,还需要去了解字符集的相关知识,不能仅仅知道有什么字符集,字符集名字怎么拼。

众多周知,Unicode字符集是全世界各国字符的合集,在一个字符集中为这些字符定义了编码。

而跨语言跨平台使用最广泛的是UTF-8。他们之间的关系是什么呢?

Unicode仅仅是定义了编码。如何存储和传输,其实际方案则是UTF-8(Unicode Transformation Format-8)、UTF-16等变换格式。

UTF-8使用比较普遍,因为它是变长编码,如果只传输ASCII字符,则每个字符只需要一个字节。因此,如果数据中包含大量的ASCII字符,那么UTF-8在存储中可以节省下很多空间。

在这之上,还有一个要明确的问题是字符间的关系如何定义,比如字符的等价规则、字符的先后规则。等价规则,是说哪些字符,我们认为是查询时不需要区分的,如a和A,e和ē、é、ě、è。比较规则,字面意思,很好理解,即大小、先后。关于中文的排序,如果选定collation为utf8mb4,中文里的“啊”、“德”、“副”就不会按"啊德副"这个顺序排序,而是会排成“副”、“啊”、“德”。如果希望中文字符能按照拼音来排序,可以使用gb18030_chinese_ci作为collation【要补充的是,collation依赖于字符集(character set),所以把gb18030_chinese_ci作为collation,就要求字符集是gb18030,而不能是utf8mb4】。

了解以上信息后,再来看utf8mb4_0900_ai_ci和utf8mb4_general_ci。

utf8mb4_general_ci是老版本mysql提供的collation,utf8mb4_0900_ai_ci则是新版本(MySQL 8.0以后)中的。

0900表示utf8基于的unicode规范为9.0版本。unicode的版本是不断更新而非一成不变的,9.0版本发布于2016年6月,mysql对此的支持总是滞后数年。

ai表示accent insensitivity,也就是“不区分音调”,而ci表示case insensitivity,也就是“不区分大小写”。

这么看来,utf8mb4_0900_ai_ci的命名要更加规范和准确,而utf8mb4_general_ci则有话说太满的感觉,所以老版本中存在utf8mb4_general_ci,在新版本中则统一更新规范成utf8mb4_0900_ai_ci。

如果以前建的各种数据表的collation是utf8mb4_general_ci,新业务建的表是utf8mb4_0900_ai_ci,恰好遇到包含字符串相等或者大小比较的联表查询语句,关联的表使用了不同的collation,MySQL就无法决策到底应当使用哪个,就会报错。既然如此,用alter table table_name collate utf8mb4_0900_ai_ci显式统一所有表的collation,问题就解决了。

把character set和collation分开的好处是什么。如果把字符看作个人,character set就相当给每个字符发张身份证,而collation相当于告诉大家,排队的时候谁在前谁在后。collation有多套,就相当于可以灵活按身高、体重、年龄、出身地等等因素来排序,却完全不会受到身份证号的干扰。文章来源地址https://www.toymoban.com/news/detail-491390.html

到了这里,关于utf8mb4的utf8mb4_0900_ai_ci如何理解?mysql新建库如何选择字符集?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 8.0的排序规则utf8mb4_0900_ai_ci和utf8mb4_general_ci有何区别?

    utf8mb4_0900_ai_ci和utf8mb4_general_ci都是MySQL针对utf8mb4编码的排序规则。 对于utf8mb4_0900_ai_ci来说,0900代表Unicode 9.0的规范,ai表示accent insensitivity,也就是“不区分音调”,而ci表示case insensitivity,也就是“不区分大小写”。 MySQL 8.0之后,默认collation不再像之前版本一样是是utf8mb4

    2024年02月11日
    浏览(32)
  • Unknown collation: ‘utf8mb4_0900_ai_ci’的解决方法

    今天在用Navicat往mysql(5.7版本)导入sql文件时,出现Unknown collation: \\\'utf8mb4_0900_ai_ci’错误。 分析 出现这样的问题是原sql文件是mysql(8.0版本),高级往低级(5.7版本)导入时出现版本不兼容的情况。 解决 把文件中的所有的 utf8mb4_0900_ai_ci 替换为 utf8_general_ci 以及 utf8mb4 替换为

    2024年02月11日
    浏览(27)
  • 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日
    浏览(37)
  • 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 1、utf8 utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符,也就是 Unicode 中的基本多文本平

    2024年02月09日
    浏览(35)
  • 数据表中字段排序规则不一致(utf8mb4_general_ci、utf8mb4_0900_ai_ci)导致的错误,附解决办法

    环境: 数据库版本MySQL 8.0.32 报错: 在查询数据的时候返回以下错误 \\\"(1267, \\\"Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation \\\'=\\\'\\\")\\\" 报错分析及初期解决过程: 该错误是因为在执行查询或比较操作时,涉及到了不同字符集的表或字段之间的比较,

    2024年02月13日
    浏览(35)
  • 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日
    浏览(26)
  • 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日
    浏览(32)
  • 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日
    浏览(30)
  • 执行SQL文件出现【Unknown collation “utf8mb4_0900_ai_ci”】的解决方案

    从服务器MySQL中导出数据为SQL执行脚本后,在本地执行导出的SQL脚本。 报错:Unknown collation “utf8mb4_0900_ai_ci” 打开SQL脚本,查看 utf8mb4_0900_ai_ci ,这是字段的字符集。 1、MySQL 版本不一致。 2、字符集编码不支持。 1、升级 MySQL 数据库版本 将本地5.7版本的 MySQL数据库升

    2024年02月11日
    浏览(26)
  • 【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日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包