前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >避坑指南!「MySQL高版本数据库(8.0)转存sql文件并导入低版本数据库(5.7)」

避坑指南!「MySQL高版本数据库(8.0)转存sql文件并导入低版本数据库(5.7)」

作者头像
Harry技术
发布于 2025-01-13 11:18:29
发布于 2025-01-13 11:18:29
25100
代码可运行
举报
运行总次数:0
代码可运行

今日在做数据迁移,由于之前使用的数据库版本是8.0.迁入的数据库为5.7,导致报错:Unknown collation: 'utf8mb4_0900_ai_ci'

由于升级数据库会影响线上现有的业务,所以采用了方案二,对迁移的数据字符集和排序规则进行了调整

为了确保数据库中所有表及其列的字符集和排序规则都正确设置,需要针对每个表和列执行相应的修改操作。这里是一个更详细的步骤指南,包括如何修改表级和列级的字符集和排序规则:

1. 修改表级的字符集和排序规则

首先,更改表的默认字符集和排序规则。可以通过以下SQL语句完成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

这条命令会将表 your_table_name 中的所有列转换为 utf8 字符集并使用 utf8_general_ci 排序规则。

2. 修改列级的字符集和排序规则

如果某些列使用了不同的字符集或排序规则,并且想要保留这些差异,需要单独修改这些列。这可以通过以下SQL语句完成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE your_table_name MODIFY your_column_name YOUR_COLUMN_TYPE CHARACTER SET utf8 COLLATE utf8_general_ci;

在这里,your_column_name 是要修改的列的名称,YOUR_COLUMN_TYPE 是该列的数据类型(例如 VARCHAR(255))。

3. 自动化脚本生成

由于手动为每个表和列生成这些语句可能很繁琐,可以编写一个脚本来自动化这个过程。以下是一个简单的MySQL脚本示例,用于生成修改表级和列级字符集和排序规则的SQL语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 修改表级的字符集和排序规则
SELECT
    CONCAT( 'ALTER TABLE `', table_name, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) AS alter_tableFROM information_schema.tablesWHERE table_schema = 'your_database_name' 
AND table_collation = 'utf8mb4_0900_ai_ci';

-- 修改列级的字符集和排序规则(如果需要)
SELECT
    CONCAT( 'ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', column_type, ' CHARACTER SET utf8 COLLATE utf8_general_ci;' ) AS alter_columnFROM information_schema.columnsWHERE table_schema = 'your_database_name' 
AND collation_name = 'utf8mb4_0900_ai_ci';

运行这些查询后,得到一系列 ALTER TABLEALTER COLUMN 语句,可以将它们复制到数据库管理工具中并执行,以更改字符集和排序规则。

4. 备份和测试

在执行任何更改之前,请确保对数据库进行了完整备份。更改字符集和排序规则可能会影响数据的存储和检索方式,因此建议在生产环境应用更改之前,先在测试环境中进行彻底的测试。

5. 检查应用程序代码

最后,不要忘记检查应用程序代码,确保它处理新字符集和排序规则的方式是正确的。特别是,如果您的应用程序依赖于特定的排序或字符比较逻辑,这些更改可能会影响这些逻辑。

执行这些更改时,请谨慎行事,并在进行任何更改之前彻底理解它们的含义和潜在影响。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Harry技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL 排序规则
每个 MySQL 字符集可以支持一个或者多个排序规则,用于定义每个字符的比较规则,包括是否区分大小写,是否区分重音等。
恋喵大鲤鱼
2023/10/12
7290
MySQL 字符集
MySQL 支持多种字符集,使您能够使用各种字符集存储数据,并根据给定排序规则执行比较。
恋喵大鲤鱼
2023/10/12
6030
技术分享 | MySQL 5.7 升级 8.0 后,排序规则问题解决方案汇总
ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation 'find_in_set'
爱可生开源社区
2024/09/14
2760
技术分享 | MySQL 5.7 升级 8.0 后,排序规则问题解决方案汇总
第08期:有关 MySQL 字符集的注意事项
创建数据库时,显式指定字符集和排序规则,同时,当切换到当前数据库后,参数 character_set_database,collation_database 分别被覆盖为当前显式指定的字符集和排序规则。举个简单例子,创建数据库 ytt_new2,显式指定字符集为 latin1,同时排序规则为 latin1_bin。之后在切换到数据库 ytt_new2 后,对应的系统参数也被修改。
爱可生开源社区
2020/07/13
7420
不可忽视的MySQL字符集
墨墨导读:字符集是一组符号和编码。collation是一组用于比较字符集中的字符的规则。
数据和云
2021/03/30
2.2K0
不可忽视的MySQL字符集
再见乱码:5 分钟读懂 MySQL 字符集设置
作者: 程序猿小卡_casper 原文:https://segmentfault.com/a/1190000012775484 一、内容概述 在MySQL的使用过程中,了解字符集、字符序的概念,以及不同设置对数据存储、比较的影响非常重要。不少同学在日常工作中遇到的“乱码”问题,很有可能就是因为对字符集与字符序的理解不到位、设置错误造成的。 本文由浅入深,分别介绍了如下内容: 字符集、字符序的基本概念及联系 MySQL支持的字符集、字符序设置级,各设置级别之间的联系 server、database、tabl
前端教程
2018/03/05
5.3K0
最近遇到的一个库&表字符集大坑
我们生产环境的建表语句,之前一直要求研发提交时候不要带上字符集和排序集,这样就可以follow数据库默认的配置。但是最近发现掉坑里了。
保持热爱奔赴山海
2022/04/19
5560
最近遇到的一个库&表字符集大坑
MySQL数据表字符集
字符集是一套符号和编码,校验规则是字符集内用来比较字符的一些规则,也就是字符集的排序规则。MySQL可以使用多种字符集和检验规则来组织字符。
灯珑LoGin
2022/10/31
2K0
技术分享 | MySQL--测试--排序规则 collation
https://dev.mysql.com/doc/refman/8.0/en/charset-general.html
爱可生开源社区
2022/10/19
1.3K0
从零开始学Mysql - 字符集和编码(上)
从零开始学Mysql - 字符集和编码(上) 前言 上一节我们系统的阐述了关于系统配置的相关细节内容,而这一节我们需要了解关于字符集和编码的内容,字符集和编码的规则其实也算是入门mysql经常遇到的
阿东
2021/12/08
8200
从零开始学Mysql - 字符集和编码(上)
故障分析 | MySQL convert 函数导致的字符集报错处理
有客户之前遇到一个 mysql8.0.21 实例中排序规则的报错,是在调用视图时抛出,报错信息如下:
爱可生开源社区
2023/02/13
1.2K0
从零开始学Mysql - 字符集和编码(下)
这个系列的文章是根据《MySQL是怎样运行的:从根儿上理解MySQL》这本书的个人笔记总结专栏,这里十分推荐大家精读一下这本书,也是目前市面上个人所知的讲述Mysql原理的为数不多的好书之一,好了废话不多说我们下面进入正题。
阿东
2022/03/08
9160
第06期:梳理 MySQL 字符集的相关概念
用途:用来映射简单的单字节字符,比如大小写英文字母、阿拉伯数字、常用的标点符、运算符、控制字符等。
爱可生开源社区
2020/06/15
1K0
【MySQL】003. MySQL操作库
💦创建数据库的本质就是在/var/lib/mysql/路径下创建一个目录 删除数据库
_孙同学
2025/04/17
590
【MySQL】003. MySQL操作库
从零开始学Mysql - 字符集和编码(下)
这个系列的文章是根据《MySQL是怎样运行的:从根儿上理解MySQL》这本书的个人笔记总结专栏,这里十分推荐大家精读一下这本书,也是目前市面上个人所知的讲述Mysql原理的为数不多的好书之一,好了废话不多说我们下面进入正题。
阿东
2022/03/30
2.3K0
从零开始学Mysql - 字符集和编码(下)
【转载】MySQL尾部空格处理与哪些设置有关?
之前有研发反馈,同一个SQL在测试环境和生产环境,数据一样,跑出来的结果却有差异。 经过排查后,发现2套环境的表字符集不一样。测试之前是5.6升级到8.0的,表字符集是utf8_general_ci的,而生产一直就是用的8.0,表字符集是utf8mb4_0900_ai_ci。
保持热爱奔赴山海
2023/07/31
6480
【转载】MySQL尾部空格处理与哪些设置有关?
开发实践|MySQL的字符集(二)
上一篇讲到字符、字符集、字符编码,粗略的一笔带过MySQL的编码,本篇想要讲讲字符编码在MySQL数据库中的应用。不仅仅是本篇文章,其他博主的文章也是,多多阅读他人的好文,才可以提升自己的水平。再次借用六一居士写的《卖油翁》来激励大家,多多阅读。
六月暴雪飞梨花
2023/12/31
3110
开发实践|MySQL的字符集(二)
MySQL【知识改变命运】01
SQL的全称是:Structured Query Language 是一种结构化语言,
用户11319080
2024/10/17
1210
MySQL【知识改变命运】01
MySQL字符比较,这也能行???
今天在线上遇到了一个MySQL字符比较的问题,感觉很有意思,专门研究了下,估计大家都没有遇到过,这里跟大家分享一下。
AsiaYe
2022/04/01
1.2K0
mysql用sql语句创建表和数据库设置字符编码
set character_set_client = gbk; -- 来自客户端的语句的字符集。服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。
Sindsun
2019/12/11
11.4K0
推荐阅读
相关推荐
MySQL 排序规则
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验