首页 > 数据库 >MySQL几种编码格式的区别(utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci 、utf8mb4_0900_ai_ci)

MySQL几种编码格式的区别(utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci 、utf8mb4_0900_ai_ci)

时间:2024-05-20 16:18:51浏览次数:22  
标签:ci set utf8mb4 ai 字符集 character 排序

https://cloud.tencent.com/developer/article/1872879

存储字符集 utf8 和 utf8mb4

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

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

如果数据库默认字符集不是 utf8mb4,那么可以在创建数据库时指定字符集:

代码语言:javascript 复制
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

查看编码格式

代码语言:javascript 复制
mysql> show variables like "%char%";
+--------------------------------------+--------------------------------+
| Variable_name            | Value             |
+--------------------------------------+--------------------------------+
| character_set_client         | utf8mb4            |
| character_set_connection       | utf8mb4            |
| character_set_database        | utf8mb4            |
| character_set_filesystem       | binary             |
| character_set_results        | utf8mb4            |
| character_set_server         | utf8mb4            |
| character_set_system         | utf8              |
| character_sets_dir          | /usr/share/mysql-8.0/charsets/ |
| validate_password.special_char_count | 1               |
+--------------------------------------+--------------------------------+
9 rows in set (0.00 sec)

MySQL 配置文件中字符集相关变量

  • character_set_client:客户端请求数据的字符集
  • character_set_connection:从客户端接收到数据,然后传输的字符集
  • character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server 指定的字符集,这个变量建议由系统自己管理,不要人为定义。
  • character_set_filesystem:把操作系统上的文件名转化成此字符集,即把 character_set_client 转换 character_set_filesystem, 默认 binary 是不做任何转换的
  • character_set_results:结果集的字符集
  • character_set_server:数据库服务器的默认字符集
  • character_set_system:存储系统元数据的字符集,总是 utf8,不需要设置

排序字符集

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 里需要统一。

utf8mb4_0900_ai_ci

推荐用 utf8mb4_unicode_ci,但是用 utf8mb4_general_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 代替。

标签:ci,set,utf8mb4,ai,字符集,character,排序
From: https://www.cnblogs.com/zhoading/p/18202256

相关文章

  • 数据库全局修改 utf8mb4_general_ci
    --修改数据库字符集和校对规则ALTERDATABASEyour_database_nameCHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ci; --修改表的字符集和校对规则ALTERTABLEyour_table_nameCONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci; --修改列的......
  • Azure Service Principals ----- Azure 上最好保守的秘密的服务
    一,引言AzureServicePrincipals是AzureActiveDirectory(AAD)中的一种标识,代表应用程序,服务,自动化流程。ServicePrincipals支持各种Azure服务和资源之家的安全通信,为应用程序提供了一种进行身份验证并于AzureAPI交互的方法。在本文中,我们将探讨AzureServ......
  • 解决yarn打包时出现“FATAL ERROR: Reached heap limit Allocation failed - JavaScri
    1、......
  • 奥特曼回应 OpenAI 股权问题和「封口协议」;月暗杨植麟:大模型和互联网开发模式完全不同
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观......
  • MySQL报错:SELECT list is not in GROUP BY clause and contains nonaggregated colum
    报错截图解决方法:修改数据库配置1.查看.sql_mode配置select@@global.sql_mode;2.查看返回信息是否包含ONLY_FULL_GROUP_BYONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION;3.去掉ONLY_FULL_GROUP_BY,其他参数不变,执行即可SETGLOBALsql_mode=‘STRI......
  • OpenAI“杀疯了”,GPT–4o模型保姆级使用教程!一遍就会!
    5月14日凌晨1点,OpenAI发布了名为GPT-4o最新的大语言模型,再次引领了人工智能领域的又一创新浪潮,让整个行业都为之震动。据OpenAI首席技术官穆里-穆拉提(MuriMurati)表示,GPT-4o是在继承GPT-4智能的基础上,对文本、视觉和音频功能进行了进一步改进,而且目前所有用户都能免费使用,但付费......
  • Google出品的NotebookLM 人工智能笔记本,一款基于RAG的personalized AI产品
    Google推出了实验性的NotebookLM产品,一款基于RAG的个性化AI助手产品,基于用户提供的可信信息,通过RAG,帮助用户洞察和学习参考内容,然后借助AI整理笔记,转换为用户最终需要的大纲、博客、商业计划书等最终目的。在之前的博客中,当时提到:"AI搜索产品的边界绝不止步于搜索,往上往下,往上如......
  • ABC354 E - Remove Pairs 做题笔记
    ABC354E-RemovePairs做题笔记题目链接对于这种带有博弈论的dp,考虑这样设计状态:令\(f_s\in\{1,0\}\)表示“游戏局面”为\(s\)时,先手必胜还是必败。本题中,“游戏局面”可以表示为剩余卡牌的编号集合。又因为本题中\(N\)​很小,通过状压,可以直接用一个int表示游戏......
  • CISCN 2024 Power_Trajectory+通风机 WP
    一些碎碎念这次是本菜鸡第一次参加正式的CTF比赛,不出意外没做出几个题。最后自己只做出了两个misc,对不起队里的大佬qwq简单记录一下做出来的两道miscPower_Trajectory这题感觉蛮不错的,算是科普了一种侧信道攻击。题目下发一个.npz文件,提示是硬件的功耗记录泄露,要我们找出密码......
  • 【一步步开发AI运动小程序】十七、如何识别用户上传视频中的运动、动作、姿态?
    【云智AI运动识别小程序插件】,可以为您的小程序,赋于人体检测识别、运动检测识别、姿态识别检测AI能力。本地原生识别引擎,内置10余个运动,无需依赖任何后台或第三方服务,有着识别速度快、体验佳、扩展性强、集成快、成本低的特点,本篇实现需要使用此插件,请先行在微信服务市场或官网了......