MySQL编码细节问题:utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_0900_ai_ci

utf8mb4_general_ci Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLI org.springframework.jdbc.UncategorizedSQLException: ### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '=' ### The error may involve defaul... 阅读详情

问题

还记得第一次创建的mysql数据库编码格式是什么?
大多数人创建的都是Utf-8格式的,但是到了工作中,创建的数据库格式用的都是utf8mb4格式,同时还带一个排序编码utf8mb4_general_ci。这些看着很类似的名词有什么关系呢?

定义

  • 标准的UTF-8字符集编码:是可以使用1-4个字节去编码21位字符,这几乎包含了世界上所有能看见的语言。
  • MySQL实现的utf8:最长使用3个字符,包含了大多数字符但并不是所有。例如emoji和一些不常用的汉字,如“墅”,这些需要四个字节才能编码的就不支持
  • utf8mb4(utf8 most bytes 4 ):Utf8最大字节数4,MySQL 5.5.3之后增加了utfmb4字符编码,支持BMP(Basic Multilingual Plane,基本多文种平面)和补充字符,最多使用四个字节存储字符。
  • 排序字符集:utf8mb4对应的排序字符集有utf8mb4_unicode_ci、utf8mb4_general_ci(MySQL 8.0 前的默认排序字符集)、utf8mb4_0900_ai_ci(MySQL 8.0 后的默认排序字符集)
    • utf8mb4_unicode_ci:是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
    • utf8mb4_general_ci:这个排序规则并没有完全实现 Unicode 的排序规则。因此,在处理某些特殊语言或字符集时,排序结果可能会出现不一致的情况。然而,在大多数情况下,这种不一致性可能并不会对结果产生显著影响,因为许多特殊字符的顺序并不需要非常精确。
    • utf8mb4_0900_ai_ci:这个排序规则是基于 Unicode 9.0 的规范,并且具有“不区分音调”(accent insensitivity)和“不区分大小写”(case insensitivity)的特性。这意味着它能够更准确地处理各种语言之间的排序问题,包括那些涉及特殊字符和音调的语言。

实际应用

首先是根据实际业务场景和mysql版本

  • 如果业务是在初始架构阶段,mysql选择使用MySQL 8.,本身从性能上来说就会比 MySQL 5.7 及之前的老版本有较大的性能提升,那直接使用utf8mb4_0900_ai_ci,同时还有更精准的排序结果。
  • 如果业务之前用的MySQL 5.7 到MySQL 8.之间的版本,使用的utf8mb4_general_ci,存在大量的数据和SQL函数,在做MySQL8适配的时候还是选择utf8mb4_general_ci,不然会出现SQL函数异常,编码转换的问题。
  • 在绝大多数情况下,这些特殊字符的顺序并不需要那么精确,utf8mb4_general_ci在比较和排序的时候更快,故utf8mb4_general_ci是在Mysql8之前作为utf8mb4的默认排序编码。
Navicat建库避坑指南:字符集、排序规则与CREATE DATABASE深层解析 数据库创建看似简单,实则是理解MySQL底层契约的关键入口。从字符集(utf8mb4)到排序规则(collation),再到CREATE DATABASE语句的语法细节,每一步都关乎数据一致性、跨平台兼容与应用层乱码防控。utf8mb4不仅是编码标准升级,更是支持emoji、生僻字和国际化业务的生存底线;而排序规则直接影响WHERE、ORDER BY等SQL行为,是数据质量的第一道防火墙。这些概念在Navicat图形界面中被高度封装,但其背后对应着服务端元数据初始化、连接层协商、存储引擎约束等完整技术链路。 阅读详情

相关推荐

MySQL入门实战指南:小公司DBA三年踩坑总结

关系型数据库是现代应用的数据基石,其核心在于通过结构化存储与可验证关联实现多系统安全共享。MySQL凭借开箱即用的部署体验、全栈兼容的生态支持和可靠的崩溃恢复能力,成为中小团队首选RDBMS。理解字符集utf8mb4、TIMESTAMP时区行为、InnoDB行级锁及最小权限模型等关键机制,能显著规避中文乱码、跨时区错乱、高并发阻塞与越权访问等高频问题。本文聚焦MySQL 8.0 LTS版本,覆盖安装配置、建表规范、索引优化、JOIN实战与备份恢复等可落地场景,特别强化VARCHAR(100)选型、EXPLA

jardownload的博客 536

mysql中的utf8与utf8mb4

一、如何设置utf8mb4 mysql中针对字符串类型,在设置charset的时候可以精确到字段。 如果只将某个字段设置utf8mb4,那么其他字段不会受影响。 如果针对表来设置,那么已经存在的字段依然是utf8,并且会多出utf8的标记,之后所创建的字段才会是utf8mb4。 如果针对库来设置,那么已经存在的表依然是utf8,之后所创建的表才会是utf8mb4。 除此之外呢,我们在连接数据库的时候,也要指明charset=utf8mb4,否则的话,此连接无法向utf8mb4的字段写入数据,并且读取的时候是

猛犸象 1万+

MySQL新手实操手册:三平台安装、中文乱码修复与可交付课程系统

MySQL是应用最广的关系型数据库,其核心价值在于稳定可靠、生态成熟且学习曲线平缓。理解字符集(如utf8mb4)与服务管理(如systemd/launchd)是初学者绕不开的基础原理;掌握跨平台安装差异(Homebrew/macOS、MSI/Windows、APT/Linux)和常见报错(如Access denied、Incorrect string value)直接决定能否快速进入SQL开发阶段。技术价值体现在开箱即用的业务支撑能力——从建库建表到JOIN查询,再到JSON字段灵活扩展,无需复杂配置即可

375

MySQL字符集utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci的区别

数据库day0601 性能测试里的并发,测试百万级数据. 一.为什么要学习数据库 1. 为了方便查询数据 2. 为了持久保存数据 二.数据库的相关概念 DBMS ,DB ,SQL 答: ​ DB 数据库,保存数据的容器 ​ DBMS 数据管理系统. 银行业一般使用Oracle和DB2. DB2 是IBM的数据库产品. ​ SQL : 结构化查询语句. 测试的角度是站在用户角度的,测试过程中尽量不使用数据库进行数据操作. 三.数据库存储数据的特点 表是放在数据库里面的; 数据是存放在表

教Linux的李老师 1万+

MySQL学习笔记:从建库建表、索引优化到线上故障排查实战

在数据库工程实践中,MySQL作为最流行的关系型数据库,其设计细节直接影响业务系统的稳定性与性能。字符集设置(如utf8mb4与utf8的区别)决定了中文数据能否正确存储,索引设计则关乎查询效率与SQL执行计划,而事务隔离级别和锁机制又是保证并发数据一致性的关键。理解这些基础概念,并掌握EXPLAIN执行计划分析、索引失效场景排查、mysqldump备份恢复等工程技能,是后端开发者从“会写SQL”迈向“能调优、能救火”的必经之路。在实际应用中,无论是从零搭建业务库,还是接手老项目优化线上故障,都需要一套从建

weixin_30399155的博客 358

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

Mysql字符集utf8和utf8mb4

背景: 1、MySQL在5.5.3版本之后增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode; 2、utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了; 名词解释: 字符集(character set/charset):字符的二进制编码方式; UTF-8:...

weixin_37468339的博客 1452

鸿蒙【ArkTS】使用TS装饰器封装网络请求HTTP

在HarmonyOS应用开发中,通过HTTP访问网络,可以使用官方提供的@ohos.net.http模块。但是官方提供的直接使用不太好使用,需要封装下才好。这里采用TS的装饰器实现AOP效果 完成前后端接口风格的统一

weixin_60376559的博客 5608

MySQL 中的 UTF-8 与 UTF8MB4:差异解析

总之,UTF-8 和 UTF8MB4 都是 MySQL 中常用的字符集选项,它们之间的区别主要在于编码范围、存储需求和兼容性。在选择字符集时,需要根据你的应用程序的具体需求来进行选择,以确保你的数据能够正确地存储和显示。如果你的应用程序需要处理一些罕见的字符或 emoji 表情等,那么 UTF8MB4 可能是更好的选择。如果你的数据库中存储了大量的文本数据,那么选择一个合适的字符集可以提高数据库的性能和存储效率。如果你的应用程序只需要处理常见的字符,那么 UTF-8 可能是一个不错的选择。

我爱娃哈哈的专栏 2007

DCN交换机通过boot模式升级

LIC导入成功后,输入enable进入特权模式,把网线接到通讯网口上,配置好对应interface vlan地址,在enable模式用 copy tftp://x.x.x.x/xxxxxx_nos.img nos.img待提示write ok时,reload设备完成升级。交换机启动后,在显示以下信息时输入“Ctrl+B”,一定得是手动按“Ctrl+B”进入的boot模式才能正常升级。升级交换机成功,在BootROM模式下,执行命令run或reboot,回到CLI配置界面。# 交换机通过boot模式升级。

m0_72501865的博客 946

领域知识图谱构建的技术流程

因此概念的属性定义十分重要,通常大部分知识库中的概念属性都是采用人工定义等方式生成的,通用知识图谱则可以从开放数据集中获取概念的属性,然后从在线百科中学习实体的属性,并对实体属性进行往上规约从而生成概念的属性。由于百科的分类体系都是经过了百科管理员或是高级编辑人员的校验,其分类系统中的数据可靠性非常高,因此从百科中抽取概念和实体,通常将标题作为实体的候选,而将百科中的分类系统直接作为概念的候选。为了对知识进行合理的组织,更好地描述知识本身与知识之间的关联,需要对知识图谱的模式进行良好的定义。

weixin_43961909的博客 333

MySQL 编码:utf8 与 utf8mb4,utf8mb4_unicode_ci 与 utf8mb4_general_ci

参考:mysql字符集小结 utf8mb4 已成为 MySQL 8.0 的默认字符集,在MySQL 8.0.1及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则。 新项目只考虑 utf8mb4 UTF-8 编码是一种变长的编码机制,可以用1~4个字节存储字符。 因为历史遗留问题,MySQL 中的 utf8 编码并不是真正的 UTF-8,而是阉割版的,最长只有3个字节。当遇到占4...

kikajack的博客 4万+

YOLO11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

YOLOv11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

魔改工程师的博客 4504

mysql中新建数据库create table的COLLATE是什么

MySQL中新建数据表时的COLLATE关键字介绍

qgnczmnmn的博客 1139

【大模型】从0到1:DeepSeek + Coze API调用全攻略,企业,开发个人专属AI智能体使用详解,小白也能轻松上手

本文介绍了如何通过API将Coze智能体集成到自有系统中的完整步骤:1)获取API token和个人工作空间的space_id;2)通过GET请求获取bot_id;3)使用POST发起对话请求,需包含bot_id、user_id和问题内容;4)通过两次API调用异步获取响应消息。文章还解释了Coze采用异步处理机制的原因,并预告了下期将讲解Java调用Coze接口的实现方法。整个过程需要使用API工具进行调试,确保了系统集成的可行性。

qq_27246521的博客 822

基于MATLAB的脑功能网络工具箱:BCT与FCLab

脑功能网络分析是神经科学领域的一个重要研究方向,它通过分析大脑中神经元之间的连接模式和信息传递方式,揭示脑网络的结构和功能。在这个领域,MATLAB是一个广泛使用的工具,提供了丰富的函数和工具箱来进行脑功能网络的分析和可视化。这些工具箱提供了丰富的函数和工具,使得脑功能网络的计算和分析变得更加简单和高效。在上述示例代码中,我们首先导入BCT工具箱,并构建一个邻接矩阵来表示脑网络的连接关系。在上述示例代码中,我们首先导入FCLab工具箱,并导入脑功能数据。函数对数据进行预处理,如去除噪声、降采样等操作。

web_bug407的博客 2607

MySQL字符集与排序规则怎么选?从utf8mb4到索引性能全解析

在数据库设计中,字符集(Character Set)决定了系统能存储哪些字符,而排序规则(Collation)则规定了字符间的比较与排序方式。MySQL作为最流行的开源关系型数据库,其字符集选择直接影响数据存储、查询效率和索引命中。utf8mb4与utf8mb3的差别、排序规则中_ai_ci和_bin等后缀的含义,是每个开发者必须理解的基础知识。正确配置字符集不仅能避免中文乱码和emoji存储失败,还能防止跨版本迁移时出现索引失效或Illegal mix of collations报错。从常规业务到多语言搜

weixin_34411563的博客 347

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1362

MySQL字符集与排序规则详解:从utf8mb4到emoji存储避坑指南

字符集定义了数据库存储文本的编码映射,排序规则则决定了查询时的比较与排序行为。理解二者原理是正确选型的基础,也是解决中文乱码、emoji无法写入、排序异常等问题的前提。在MySQL中,utf8mb4是存储完整Unicode字符的推荐选择,而排序规则如utf8mb4_0900_ai_ci则在多语言场景下提供更符合标准的比较逻辑。字符集还直接影响索引长度上限,字段类型与联合索引设计均需联动考量。无论是新建Web应用、迁移老项目,还是排查线上数据异常,合理的字符集与排序规则选型都能显著降低后期维护成本。本文从基础

weixin_30399155的博客 282

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MySQL库操作全解析:从建库到删库的实战避坑指南

数据库是应用系统的核心基础设施,而MySQL作为最流行的关系型数据库之一,其库级别的操作是所有SQL技能的基础。很多开发者跳过库管理直接学习表查询与索引,却在字符集配置、权限控制、数据安全等问题上频频受阻。本文从数据库的物理与逻辑角色出发,系统讲解MySQL中创建数据库、查看列表、切换库、修改字符集、删除库等核心命令的语法与细节,重点剖析utf8mb4字符集与排序规则对中文和特殊字符存储的影响,并深入探讨用户权限隔离、远程连接配置和备份恢复策略。通过梳理常见错误如1044、1049、1064等的成因与解法,

weixin_34277853的博客 155

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MySQL报错1267 Illegal mix of collations:排序规则冲突排查与解决

在数据库设计与运维中,字符集与排序规则是影响字符串比较与存储结果的关键要素。MySQL 通过字符集(Charset)定义字符的编码方式,而排序规则(Collation)则决定字符的比较顺序与大小写敏感策略。当两张表或字段采用不同的排序规则进行关联查询时,常会触发“Illegal mix of collations”错误(即 MySQL 1267 错误),导致 SQL 无法正常执行。该问题在 utf8mb4 字符集下尤为常见,例如 utf8mb4_general_ci 与 utf8mb4_unicode_ci

weixin_34380948的博客 488

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MySQL字符集迁移实战:从Emoji存不进去到utf8mb4全链路改造

字符集是数据库存储的基础设施,直接决定文本能否被正确编码与解析。在日常开发中,用户输入Emoji导致MySQL报错“Incorrect string value”是典型的高频问题,背后往往源于默认字符集utf8仅支持3字节编码,无法覆盖Unicode辅助平面的4字节字符。理解UTF-8变长编码原理后,才能真正意识到字符集的选择不只是存储层问题,还涉及连接、库、表、字段四层链路,以及排序规则、索引长度等连锁影响。在生产环境中迁移到utf8mb4,需要按库、表、字段逐级CONVERT,同时检查连接配置和索引上限

weixin_30086969的博客 318

数据库的操作

说明:1.大写的表示关键字2.[] 是可选项3.CHARACTER SET: 指定数据库采用的字符集4.COLLATE: 指定数据库字符集的校验规则。

Zengwengang的博客 242

数据库---Day2 数据库操作

本文详细介绍了MySQL数据库的四大核心操作:查看、创建、修改和删除数据库。重点讲解了创建数据库时的安全规范(IF NOT EXISTS)和字符集配置(推荐utf8mb4字符集+utf8mb4_0900_ai_ci排序规则),强调正确配置字符集对避免数据乱码的重要性。文章还深入解析了字符集与排序规则的关系、查看系统默认配置的方法,并提供了各类操作的语法速查表。特别提醒删除数据库是高风险操作,生产环境必须谨慎。最后指出下一步将学习表的操作,这是MySQL数据存储的核心内容。

HRDMN的博客 659

Python自动化实战:用TaoToken统一Key批量修改数据库字符集配置

用Python脚本批量统一多实例MySQL字符集,通过config.toml管理连接配置,并用TaoToken统一Key收敛模型调用凭证,避免密钥硬编码。文中提供可复制的配置骨架、批量转换脚本、三层验证SQL与常见报错排查,适合后端与运维做字符集治理。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_28746457的博客 204

OpenEMR 贡献者开发指南:从 Docker 开发环境、Conventional Commits 到 CI 全流程实践

OpenEMR 是目前最流行的开源电子健康记录(EHR)与医疗诊所管理解决方案。本文以仓库根目录的 [CONTRIBUTING.md](https://link.gitcode.com/i/04f9ca97e3823508a09eb92f5bae52d0) 为主线,完整梳理贡献者从"提交第一个 PR"到"通过 CI 全量校验"的完整链路:包括提案流程、仓库划分、Conventional Commi

gitblog_01161的博客 91
上一篇: 红黑树和平衡二叉树的区别
下一篇: Springboot中的设计模式:根据设计模式的类型
贝多芬也爱敲代码
博客等级 码龄8年 218粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝多芬也爱敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值