MySQL字符集Character和排序规则Collations的查看和修改

MySQL字符集埋的坑:一次SQL注入报错‘Illegal mix of collations‘的深度排雷记录 本文深入分析了MySQL字符集与排序规则(collation)不一致导致的`Illegal mix of collations`错误,特别是在SQL注入测试中常见的UNION查询场景。通过解析字符集与排序规则的本质区别、MySQL的四层继承机制,提供了系统化的检测与修复方案,包括批量修改collation的SQL脚本和开发最佳实践,帮助开发者从根本上解决这类问题。 阅读详情


字符集和排序规则

1.概念

字符集(Character)是一组符合和编码。

排序规则(Collations)是一组用于比较字符集中字符的规则。

MySQL使用字符集存储字符串,使用排序规则比较字符串。字符集和排序规则可以指定到列上,同一个表的各个列可以是不同的字符集和排序规则。

字符集和排序规则不一致会导致join查询的时候on失败。同样的字符集和排序规则也会提升join的效率。

2.操作起来了

字符集和排序规则默认有四个级别:服务器、数据库、表、列。

字符集会影响存储,还会影响客户端程序和MySQL服务器(实例)之间的通信。

2.1.MySQL支持哪些字符集和排序规则

查看支持的字符集

show character set ;

查看支持的排序规则

show collation ;

2.2.默认字符集和排序规则

2.2.1.查看

查看各项字符集,表和列的字符集需要在表设置里面查看

show variables like '%character%';
Variable_nameValue备注
character_set_clientutf8mb4默认客户端的字符集
character_set_connectionutf8mb4默认连接的字符集
character_set_databaseutf8mb4默认数据库的字符集
character_set_filesystembinary默认文件系统的字符集
character_set_resultsutf8mb4默认返回结果的字符集
character_set_serverutf8mb4默认服务器(MySQL实例)的字符集
character_set_systemutf8mb3默认系统(Linux、WinServer)的字符集
character_sets_dir/usr/share/mysql-8.0/charsets/
2.2.2.修改
2.2.2.1.设置客户端、连接、返回结果的字符集

MySQL的utf8mb4才是真正的utf8。这是一个历史原因,需要支持中文的话,选utf8mb4。

SET NAMES 'utf8mb4';

这个命令影响的是character_set_client、character_set_connection、character_set_results

2.2.2.2.设置各项字符集

set @@[Variable_name]=‘字符集’; 即可

举个栗子:

set @@character_set_server='utf8mb4';

表和列的字符集需要在表配置里面修改。

2.3.库database的字符集和排序规则
2.3.1.查看

show create database 库名;

show create database school;

结果

DatabaseCreate Database
schoolCREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION=‘N’ */

CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,字符集为utf8mb4,排序规则为utf8mb4_0900_ai_ci

2.3.2.修改

alter database 库名 character set 字符集 collate 排序规则;

alter database school character set `utf8mb4` collate `utf8mb4_general_ci`;

2.4.具体表table的字符集和排序规则

2.4.1.查看

show create table 库名.表名;

show create table school.student;
# 或者
show create table student;

结果

TableCreate Table
studentCREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL COMMENT ‘名字’,
`age` int unsigned DEFAULT NULL COMMENT ‘年龄’,
`address` varchar(100) DEFAULT NULL COMMENT ‘地址’,
`class_id` int DEFAULT NULL COMMENT ‘班级id’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci,字符集为utf8mb4,排序规则为utf8mb4_0900_ai_ci

2.4.2.修改

alter table 库名.表名 character set = 字符集 collate = 排序规则;

alter table school.student character set = `utf8mb4` collate = `utf8mb4_general_ci`;

2.5.具体字段的字符集和排序规则

2.5.1.查看

show full columns from 库名.表名;

show full columns from school.student;
# 或者
show full columns from student;

结果

FieldTypeCollationNullKeyDefaultExtraPrivilegesComment
idintNULLNOPRINULLauto_incrementselect,insert,update,references
namevarchar(50)utf8mb4_0900_ai_ciYESNULLselect,insert,update,references名字
ageint unsignedNULLYESNULLselect,insert,update,references年龄
addressvarchar(100)utf8mb4_0900_ai_ciYESNULLselect,insert,update,references地址
class_idintNULLYESNULLselect,insert,update,references班级id
2.5.2.修改

修改字段的SQL没固定模式

ALTER TABLE `school`.`student` MODIFY COLUMN `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名字' AFTER `id`;

注意:如果使用ALTER TABLE将列从一个字符集转换为另一个字符集,MySQL会尝试映射数据值,但如果字符集不兼容,则可能会丢失数据。

2.6.JDBC连接的字符集

jdbc:mysql://localhost:3306/school?characterEncoding=utf8&useLegacyDatetimeCode=false&serverTimezone=UTC

JDBC连接

《MySQL 入门教程》第 28 篇 字符集与排序规则 介绍 MySQL 中的字符集(Character Set)和排序规则(Collation)。字符集决定了能够存储哪些字符,排序规则定义了字符集中字符的排序和比较顺序,包括是否区分大小写,是否区分重音等。 MySQL 支持服务器、数据库、表、字符字段级别以及字符串常量的字符集和排序规则设置,同时还可以设置客户端连接的字符集和国家字符集。 阅读详情

相关推荐

使用MySQL设置collation_connection数据库

在MySQL中,collation_connection是一个会话级别的变量,用于指定连接到数据库时的字符集和排序规则。通过正确设置collation_connection,可以确保在数据库连接期间使用正确的字符集和排序规则,从而避免出现字符集不兼容或排序错误的问题。综上所述,通过按照上述步骤设置collation_connection数据库,您可以在MySQL中使用正确的字符集和排序规则连接到数据库。将’collation_name’替换为所需的字符集和排序规则的名称。步骤 1:连接到MySQL数据库。

BitNetT的博客 3650

MySQL 字符串类型

MySQL 中的字符串大体分为三类,这里不讨论第三类: 长度以字符为单位的(character string 或 nonbinary string):CHAR、VARCHAR、TEXT(共四种:TINYTEXT、TEXT、 MEDIUMTEXT、LONGTEXT) 长度以字节为单位(binary string):BINARY、VARBINARY、BLOB(共四种:TINYBLOB、BLOB、 MEDIUMBLOB、LONGBLOB) 其他:ENUM、SET 下表为各种类型的最大长度: 单位 25

赵丙双的博客 6267

MySQL字符集与排序规则

字符集(character set)可以理解为符号(symbols)与编码(encoding)的集合,而排序规则(collation)则是指用来比较字符集中所有字符的规则。MySQL支持多种字符集,用于存储数据、比较字符串、以及客户端程序与MySQL服务器之间的通信。MySQL支持在以下五个层级设定字符集...

Sebastien23的博客 4812

MySQL中character的意思_mysql 中 character set 与 collation 的点滴理解

使用 mysql 建立数据表的时候, 总免不了要涉及到 character set 和 collation 的概念, 以前不是很了解。java这两天不是很忙, 就本身整理了一下。mysql先来看看 character set 和 collation 的是什么?sql&. character set, 即字符集。数据库咱们常看到的 utf-8, GB2312, GB18030 都是相互独立的...

weixin_31362539的博客 5295

STM32CubeMX最新版下载安装全攻略(附官网访问问题解决方案)

本文提供了STM32CubeMX最新版的详细下载与安装指南,并针对国内开发者常见的官网访问缓慢、注册验证邮件延迟等问题,给出了实用的解决方案和备选策略。通过清晰的步骤解析,帮助用户快速部署这一强大的STM32图形化配置工具,从而高效启动嵌入式开发项目。

weixin_28256233的博客 193

手把手复现论文:SVPWM过调制I区与II区算法仿真(附MATLAB源码)

本文详细介绍了SVPWM过调制I区与II区算法的MATLAB仿真实现,从理论推导到Simulink建模逐步解析。通过源码示例展示幅值补偿和六边形跟踪等关键技术,帮助电力电子研究者掌握过调制算法的核心实现方法,适用于电机控制、变频器等工业应用场景。

weixin_28739079的博客 529

mysql 5.6 character_深入理解mysql字符集(mysql 5.6)

字符集概述和基本指令字符集(character)是一套符号和编码。校对规则(collation)是在字符集内用于比较字符的一套规则,拿mysql官方文档的例子来说:假设我们有一个字母表使用了四个字母:‘A’、‘B’、‘a’、‘b’。我们为每个字母赋予一个数值:‘A’=0,‘B’= 1,‘a’= 2,‘b’= 3。字母‘A’是一个符号,数字0是‘A’的编码,这四个字母和它们的编码组合在一起是一个字符...

weixin_29770217的博客 590

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

mysql字符集编码和排序规则

环境: mysql 5.7 26 DBeaver 21.1.2.202107041908 参考:《MySQL字符集与排序规则总结》 一、说说字符集、字符集编码和排序规则 字符集:罗列所有图形字符的一张大表。 比如: GBK字符集(中国制造): 罗列了所有的中文简体、繁体字的一张大表。 Unicode字符集(全世界通用):罗列了世界上所有图形字符的一张大小表。 字符集编码:将字符集上罗列的图形字符存储到计算机中的一种编码规则。 比如: GBK字符编码(中国制造):GBK本身既是字符集,

火焰 1万+

基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测

在量化投资领域,多因子选股模型通过挖掘市场数据中的有效信号来预测股票收益。其核心原理在于利用统计学与机器学习算法,从海量因子中识别出与未来收益具有稳定相关性的特征。这一技术的核心价值在于将主观投资决策转化为系统化、可重复的客观过程,从而在控制风险的前提下追求超额收益。其典型应用场景包括股票阿尔法策略构建、Smart Beta产品设计以及资产配置中的股票筛选环节。本文聚焦于如何通过信息系数(IC)这一关键指标,动态融合Ridge回归、MLP神经网络和随机森林等多个预测模型,构建一个能够自适应市场风格轮动的选股

weixin_34216614的博客 451

ArcGIS图解建模工具与DEM提取山脊、山谷线(水文分析、表面分析)

参考汤国安、杨昕等编著的《地理信息系统空间分析实验教程第二版》 利用水文分析(流量)和表面分析(坡向变率)得到山脊和山谷线 文章目录1、基本概念1.1 正地形1.2 负地形正负地形的影响2、水文分析方法2.1 基本思想原理2.2 技术路线2.3 操作步骤2.3.1 正负地形的提取2.3.2 利用水文分析思想和工具提取研究区域的山脊线2.3.3 利用水文分析思想和工具提取研究区域的山谷线2.3.4 利用水文分析提取山脊线和山谷线结果3、表面分析方法3.1 基本思想原理3.2 技术路线3.3 操作步骤4、图.

fungis 1万+

MySQL字符集、排序规则和大小写敏感相关问题总结

MySQL字符集、排序规则和大小写敏感相关问题总结,熟悉这些有助于数据库的设计和相关数据库问题的排查

拾年一剑 的专栏 2769

NLTK中WordNet与同义词处理

通过本教程,学习了如何使用NLTK中的WordNet进行自然语言处理任务。首先介绍了WordNet的基本概念及其在NLTK中的集成使用,接着讲解了如何查找同义词、反义词等词汇关系,并结合实际应用演示了语义相似性计算。这些技能在文本分析、情感分析、信息检索等场景中有广泛应用,可以帮助开发者构建更智能的自然语言处理系统。掌握这些基本操作后,可以进一步探索WordNet的其他高级功能,结合其他NLTK工具进行更复杂的语言分析。

Mr数据杨 471

【mysql8】排序规则--Collations

mysql

践行见远 1291

R语言数据可视化:绘制世界地图的两种方案

本文介绍了两种使用R语言绘制世界地图的方案:包含边界边框和不包含边界边框。无论您选择哪种方案,使用ggplot2包和相关的地理数据包,我们可以轻松地绘制出漂亮的世界地图。R语言提供了丰富的包和函数,使我们能够轻松地绘制世界地图,并根据需求添加边界边框。在本文中,我将介绍两种绘制世界地图的方案:一种包含边界边框,一种不包含边界边框。在上述代码中,我们使用了与方案一相同的数据准备和地图绘制步骤,但省略了添加边界边框的代码。函数的调用,我们可以绘制不包含边界边框的世界地图。方案二:绘制不包含边界边框的世界地图。

CodeMaven的博客 2225

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MySQL数据库批量修改表及字段的字符集及排序规则

在执行sql语句,做关联表查询有时候会报错,字段的排序规则不一样 这是由于创建表时指定的排序规则不一致导致的,原因可能是创建数据库的不是同一拨人,指定的不一样。或是在不同的数据库版本中创建的没有指定,默认的排序规则不一样。utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符,也就是 Unicode 中的基本多文本平面。 要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持。 为了获取更好的兼容性,应该总

weixin_37558119的博客 1488

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Mysql字符集排序规则不一致造成的关联查询错误-Illegal mix of collations

原因就是不同字符集排序规则不能进行join查询。

打不死的小强lee的博客 2765

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

mysql的collations

例如,在 utf8_general_ci 排序规则下,字符串 "apple" 和 "APPLE" 被视为相等,而在 utf8_bin 排序规则下,它们被视为不同。因此,在选择字符集和排序规则时,需要根据具体的业务需求来进行选择,以确保数据的正确比较和排序。在 MySQL 数据库中,Collation(排序规则或字符集排序规则)是用于指定字符集的字符比较和排序方式的一组规则。同时,还可以在表的列级别或字符串类型字段的级别上单独指定字符集和排序规则,以覆盖数据库的默认设置。

qq_41081716的博客 2546

MySQL 字符集

引言 刚刚入门数据库开发的开发者估计没少被字符串“乱码”的问题所困扰,导致乱码的原因有很多,而最常见的原因可能是对字符集和排序规则没有概念,因此在创建数据库时便已早早埋下了地雷。   字符集和排序规则 同理,假如使用 Navicat for MySQL 这样的可视化管理工具来管理数据库,在创建数据库时会弹出如下弹窗,要求我们输入三项基础信息:数据库名、字符集和排序规则,其中字符集和排序规则...

linshuhe1的专栏 713

3. COLLATIONS

3. COLLATIONS 表COLLATIONS提供有关每个字符集排序规则的信息。下表中SHOW Name对应SHOW COLLATION。 INFORMATION_SCHEMA Name SHOW Name Remarks COLLATION_NAME Collation CHARACTER_S...

dbtrd733355的博客 313

MySQL: Connection Character Sets and Collations

character_set_servercollation_servercharacter_set_databasecollation_database character_set_clientcharacter_set_results character_set_connection <===character_set_clientcollation_connecti...

aecuhty88306453的博客 251

Mysql中各种与字符编码集(character_set)有关的变量含义

mysql涉及到各种字符集,在此做一个总结。     字符集的设置是通过环境变量来设置的,环境变量和linux中的环境变量是一个意思。mysql的环境变量分为两种:session和global。session变量是仅在这次会话红中有效,在mysql中,一次会话可以理解为当前连接(除非reload,否则,一次会话就只有一次连接)。global环境变量则是确定了...

DDD_QQQ的博客 728

collations默认排序规则的坑

1、每个字符集有一个默认的排序规则,在mysql5.7,utf8mb4的默认排序规则为utf8mb4_general_ci,在mysql8.0,utf8mb4的默认排序规则为utf8mb4_0900_ai_ci。迁移后: 8.0上字符集为utf8mb4,排序规则自动变成了utf8mb4_0900_ai_ci(期望general_ci)迁移前:5.7上字符集为utf8mb4,排序规则为utf8mb4_general_ci。2、在建表的时候若没有显式指定排序规则,则自动使用字符集的默认排序规则。

践行见远 771

统一MySql各表字段字符集及校对规则(解决MySql联合查询时各表字段因该不同导致的错误1271 - illegal mix of collations for operation ‘UNION‘)

这是因为UNION的时候,title。当你用UNION合并时,MySQL 必须统一 collation,如果不一致就会报1271错误。✅ 解决办法:在所有子查询里,把需要UNION的字符字段统一转换,比如用CONVERT()或CAST()最好确认一下所有涉及UNION的字符串字段(上面是比较针对性的解决办法,下面是批量化的解决办法。

暂时先用这个名字 1414

10.3 指定字符集和排序规则

官方文档地址:10.3 Specifying Character Sets and Collations 10.3.1 Collation Naming Conventions 10.3.2 Server Character Set and Collation 10.3.3 Database Character Set and Collation 10.3.4 Table Character Set and Collation 10.3.5 Column Character Set and Collati

一线大码 258
上一篇: mybaits的XML中不能使用大于号>和小于号<
下一篇: JDK监控和诊断工具——jconsole
编程还未
博客等级 码龄5年 4293粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

编程还未

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

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

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

打赏作者

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

抵扣说明:

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

余额充值