mysql8的collate问题和修改

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: mysql8的collate问题和修改
  1. 什么是 COLLATE?

COLLATE 是 MySQL 中的字符排序规则(collation),决定字符串比较、排序时的规则。
例如,utf8mb4_general_ci 是一种排序规则,ci 表示不区分大小写(case-insensitive)。

  1. MySQL 8 默认的字符集和排序规则

默认字符集通常是 utf8mb4
默认排序规则是 utf8mb4_0900_ai_ci(基于 Unicode 9.0,支持更全面的字符比较)

  1. 查看当前数据库和表的字符集与排序规则

-- 查看数据库默认字符集和排序规则
SHOW CREATE DATABASE your_database;
-- 查看表的字符集和排序规则
SHOW TABLE STATUS WHERE Name='your_table';
-- 查看字段的字符集和排序规则
SHOW FULL COLUMNS FROM your_table;
php
167 Bytes
© 菜鸟-创作你的创作

  1. 常见 COLLATE 相关问题

排序结果和旧版本不一致
MySQL 8 用了新的排序规则 utf8mb4_0900_ai_ci,可能导致排序结果与 MySQL 5.7 utf8mb4_general_ci不同。
字符比较敏感
某些查询因为排序规则不同,WHERE 比较结果不一样。
跨字符集/排序规则比较导致报错
不同字段或变量 COLLATE 不一致,比较时会报错。

  1. 修改数据库、表、字段的 COLLATE

(1)修改数据库的字符集和排序规则

ALTER DATABASE your_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
php
78 Bytes
© 菜鸟-创作你的创作
(2)修改表的字符集和排序规则

ALTER TABLE your_table
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
php
83 Bytes
© 菜鸟-创作你的创作
注意:CONVERT TO 会修改所有字符字段的字符集和排序规则。
(3)修改字段的排序规则

ALTER TABLE your_table
MODIFY column_name VARCHAR(255)
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
php
104 Bytes
© 菜鸟-创作你的创作

  1. 查询时临时指定排序规则

SELECT * FROM your_table
WHERE column_name COLLATE utf8mb4_general_ci = 'abc';
php
78 Bytes
© 菜鸟-创作你的创作
或者排序时:

SELECT * FROM your_table
ORDER BY column_name COLLATE utf8mb4_general_ci;
php
73 Bytes
© 菜鸟-创作你的创作

  1. 推荐做法

统一数据库、表、字段字符集和排序规则,避免跨字符集比较错误。
如果想兼容 MySQL 5.7 旧排序行为,可以把 COLLATE 设置为 utf8mb4_general_ci 或者 utf8mb4_unicode_ci。
MySQL 8 默认 utf8mb4_0900_ai_ci 排序更严格且支持更多 Unicode 字符,建议新项目使用它。
https://www.52runoob.com/archives/5536

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
开发工具 git 索引
Git使用详细教程(4):git rm使用详解
Git使用详细教程(4):git rm使用详解
343 104
|
4月前
|
SQL Oracle 关系型数据库
MySQL的sql_mode模式说明及设置
MySQL的sql_mode模式说明及设置
686 112
|
4月前
|
存储 弹性计算 运维
阿里云服务器快照是什么?快照详细介绍
阿里云ECS快照服务是对云盘数据在某一时刻的完整备份,支持定时自动备份,防范数据丢失风险。快照按存储空间收费,可用OSS存储包抵扣。适用于日常备份、高危操作恢复、快速数据恢复、业务批量部署等场景,保障业务连续性与数据安全。
|
测试技术 Nacos 数据库
Nacos 配置中心(命名空间切换) | 学习笔记
快速学习 Nacos 配置中心(命名空间切换)
|
4月前
|
编解码 Python
2015 年美国新英格兰地区 LiDAR 测算的生物量、冠层高度和覆盖度
简介:该数据集基于2010-2015年LiDAR与FIA数据,提供美国新英格兰地区30米分辨率的森林生物量、冠层高度及覆盖度栅格数据,支持区域森林碳储量评估与监测。
63 0
|
弹性计算 Oracle 固态存储
阿里云ESSD云盘性能级别PL0、PL1、PL2和PL3怎么选?
阿里云服务器ESSD云盘性能级别PL0、PL1、PL2和PL3怎么选择?不同性能级别对应的单盘IOPS性能上限、IO和吞吐量都不同,ESSD云盘容量越大可选择的PL级别越高,性能级别PL越高价格也越贵,阿里云百科来详细说下阿里云ESSD云盘不同性能级别区别以及选择方法:
5162 0
阿里云ESSD云盘性能级别PL0、PL1、PL2和PL3怎么选?
|
Java Spring
SpringBoot: 启动Banner在线生成工具
SpringBoot: 启动Banner在线生成工具
36990 1
SpringBoot: 启动Banner在线生成工具
|
Dubbo 前端开发 Java
Dubbo3 服务原生支持 http 访问,兼具高性能与易用性
本文展示了 Dubbo3 triple 协议是如何简化从协议规范与实现上简化开发测试、入口流量接入成本的,同时提供高性能通信、面向接口的易用性编码。
17087 93
|
JavaScript
Vue3标签(Tag)
这是一个Vue组件`Tag.vue`,提供了多样化的标签展示功能。支持设置标签颜色、尺寸、图标、边框等样式,并可实现标签的动态添加与删除。
301 2
Vue3标签(Tag)