mysql8的collate问题和修改

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 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 
相关文章
hutool工具对象序列化和反序列化
hutool工具对象序列化和反序列化
hutool工具对象序列化和反序列化
|
SQL Oracle 关系型数据库
【MySQL异常】1093 - You can‘t specify target table ‘daily_job‘ for update in FROM clause
【MySQL异常】1093 - You can‘t specify target table ‘daily_job‘ for update in FROM clause
730 0
|
8月前
|
开发工具 git 索引
Git使用详细教程(4):git rm使用详解
Git使用详细教程(4):git rm使用详解
523 104
|
9月前
|
人工智能 自然语言处理 测试技术
Apipost 与 Apifox 深度对比:谁是 API 开发的最佳拍档?
在 API 开发中,Apipost 与 Apifox 是两款流行的国产工具。本文通过实际项目的对比发现,Apipost 在 AI 功能方面表现突出,如 AI 自动生成文档、测试用例、脚本等,显著提升开发效率。基础功能上,Apipost 也更全面,支持离线使用、OpenAPI 格式导出、多种协议及数据库字典导入,界面简洁易用,综合性能优于 Apifox。
465 5
|
6月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
2041 8
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
1868 2
|
存储 关系型数据库 MySQL
MySQL细节优化:关闭大小写敏感功能的方法。
通过这种方法,你就可以成功关闭 MySQL 的大小写敏感功能,让你的数据库操作更加便捷。
1027 19
|
弹性计算 Oracle 固态存储
阿里云ESSD云盘性能级别PL0、PL1、PL2和PL3怎么选?
阿里云服务器ESSD云盘性能级别PL0、PL1、PL2和PL3怎么选择?不同性能级别对应的单盘IOPS性能上限、IO和吞吐量都不同,ESSD云盘容量越大可选择的PL级别越高,性能级别PL越高价格也越贵,阿里云百科来详细说下阿里云ESSD云盘不同性能级别区别以及选择方法:
5672 0
阿里云ESSD云盘性能级别PL0、PL1、PL2和PL3怎么选?
|
SQL 存储 关系型数据库
【mysql】将逗号分割的字段内容转换为多行并group by
【mysql】将逗号分割的字段内容转换为多行并group by
|
移动开发 关系型数据库 MySQL
MySQL中的ROW_NUMBER窗口函数简单了解下
ROW_NUMBER是 MySQL8引入的窗口函数之一,它为查询结果集中的每一行分配一个唯一的顺序号(行号)。ROW_NUMBER在分页、去重、分组内排序等场景中非常有用。
1060 4
下一篇
开通oss服务