Mysql 字符集修改方案及说明

说明
  • 文章内容适用于 Mysql5.7、Mysql 8.0,其它版本可自行验证。

  • 数据库、表、字段的字符集排序规则修改为:utf8mb4utf8mb4_general_ci

  • Mysql表中字符类型的字段长度为支持的字符个数,修改字符集不需要增加字段长度。

  • 经验证,字符集的变更不需要重新创建索引。

1.若库的字符集需修改:

  整理留存相关库原字符集SQL,以备回滚使用:

ALTER DATABASE [库名] CHARACTER SET [原字符集] COLLATE [原排序规则];

  执行以下SQL修改指定库的字符集:

ALTER DATABASE [库名] CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2.执行以下SQL并记录表原字符集SQL表需修改字符集SQL
SELECTDISTINCTtable_schema,table_name,character_set_name,collation_name,CONCAT('ALTER TABLE ', table_schema, '.', table_name, ' CONVERT TO CHARACTER SET \'', character_set_name, '\' COLLATE \'', collation_name, '\';') '表原字符集SQL',CONCAT('ALTER TABLE ', table_schema, '.', table_name, ' CONVERT TO CHARACTER SET \'utf8mb4\' COLLATE \'utf8mb4_general_ci\';') '表需修改字符集SQL'
FROMinformation_schema.COLUMNS 
WHERE TABLE_SCHEMA NOT IN ('mysql','performance_schema','sys','information_schema','mysql_ha','mysql_db_monitor')AND COLLATION_NAME IS NOT NULL AND COLLATION_NAME != 'utf8mb4_general_ci';

注:

  1. 表原字符集SQL用于回滚备份。
  2. 表需修改字符集SQL用于执行表整体字符集修改。
3.执行以下SQL并记录字段原字符集SQL
SELECTTABLE_SCHEMA '数据库',TABLE_NAME '表',COLUMN_NAME '字段',CHARACTER_SET_NAME '原字符集',COLLATION_NAME '原排序规则',CONCAT('ALTER TABLE ',TABLE_SCHEMA, '.', TABLE_NAME,' MODIFY COLUMN ',COLUMN_NAME,' ',COLUMN_TYPE,' CHARACTER SET ', CHARACTER_SET_NAME, ' COLLATE ', COLLATION_NAME, ( CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END ),( CASE WHEN COLUMN_COMMENT = '' THEN ' ' ELSE concat( ' COMMENT''', COLUMN_COMMENT, '''' ) END ),';' ) '字段原字符集SQL',CONCAT('ALTER TABLE ',TABLE_SCHEMA, '.', TABLE_NAME,' MODIFY COLUMN ',COLUMN_NAME,' ',COLUMN_TYPE,' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci',( CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END ),( CASE WHEN COLUMN_COMMENT = '' THEN ' ' ELSE concat( ' COMMENT''', COLUMN_COMMENT, '''' ) END ),';' ) '字段需修正字符集SQL' 
FROM information_schema.`COLUMNS` WHERE 1=1AND COLLATION_NAME != 'utf8mb4_general_ci'AND TABLE_SCHEMA NOT IN ('mysql','performance_schema','sys','information_schema','mysql_ha','mysql_db_monitor');

注: 字段原字符集SQL用于回滚备份。

4.执行修正SQL

  逐条执行第2步中获取的表需修改字符集SQL

  执行失败情况处理:

  • 外键原因:需先关闭外键约束,全部执行完成后再打开外键约束。
-- 关闭外键约束
SET FOREIGN_KEY_CHECKS=0;-- 打开外键约束
SET FOREIGN_KEY_CHECKS=1;
  • 表字段过长:需酌情减短相关字段的长度。
5.若需回滚原字符集,则按以下步骤进行

  a. 执行第1步中备份的相关库原字符集SQL

  b. 执行第2步中备份的表原字符集SQL

  c. 执行第3步中备份的字段原字符集SQL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/142327.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读 08】Adaptive Anomaly Detection within Near-regular Milling Textures

2013年,太老了,先不看 比较老的一篇论文,近规则铣削纹理中的自适应异常检测 1 Abstract 在钢质量控制中的应用,我们提出了图像处理算法,用于无监督地检测隐藏在全局铣削模式内的异常。因此,我们考虑了基于…

如何正确使用MySQL的索引呢?

前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。 😇😇😇有兴趣的话关注博主一起学习,一起进步吧! 一、索引使用…

探索创意的新辅助,AI与作家的完美合作

在现代社会,文学创作一直是人类精神活动中的重要一环。从古典文学到现代小说,从诗歌到戏剧,作家们以他们的独特视角和文学天赋为我们展示了丰富多彩的人生世界。而近年来,人工智能技术的快速发展已经渗透到各行各业,文…

【数据结构】二叉树的销毁 二叉树系列所有源代码(终章)

目录 一,二叉树的销毁 二,二叉树系列所有源代码 BTee.h BTee.c Queue.h Queue.c 一,二叉树的销毁 二叉树建好了,利用完了,也该把申请的动态内存空间给释放了,那要如何释放呢? 我们还是以…

LeetCode力扣020:有效的括号

有效的括号 实现思路 设立判定条件遍历的范围 代码实现 class Solution(object):def isValid(self, s):""":type s: str:rtype: bool"""nlen(s)for i in range(0,n-1):if s[i]( and s[i1]!):return Falseif s[i][ and s[i1]!]:return Falseif s…

02Redis的命令行客户端和桌面客户端的下载和安装

Redis桌面客户端 安装完成Redis服务,我们就可以在Redis的客户端操作Redis的数据库实现数据的CRUD了,客户端分为三类命令行客户端, 图形化桌面客户端,编程客户端 命令行客户端 Redis安装完成后就自带了命令行客户端: redis-cli [options] [commonds] -h选项:指定…

Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具,可以去 github 下载最新版:https://github.com/allure-framework/allure2/releases 2、解压到本地 3、配置环境变量 复制路径如:F:\allure-2.13.7\bin 环境变量、Path、添加 F:\a…

从零开始的 MyBatis 拦截器之旅:实战经验分享

文章目录 MyBatis拦截器可以做什么?Mybatis核心对象介绍四大核心对象如何实现?接口讲解Interceptor接口intercept方法plugin方法setProperties 完整SQL打印拦截器实战拦截器实现拦截器注册 MyBatis拦截器可以做什么? MyBatis拦截器是MyBatis…

软件测试面试题 —— 整理与解析(4)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

自动化测试:为什么需要框架

前两天跟老板出去做pre-sales. 主要是去卖我们的自动化测试服务,工具用的是HP UFT。做过自动化的人应该知道,UFT在自动化测试领域已经算是最好的工具之一了。客户是个有技术背景的人,所以不那么好忽悠。我们准备了一大堆自动化测试优点的幻灯…

推荐一个AI人工智能技术网站(一键收藏,应有尽有)

1、Mental AI MentalAI(https://ai.ciyundata.com/)是一种基于星火大模型和文心大模型的知识增强大语言模型,专注于自然语言处理(NLP)领域的技术研发。 它具备强大的语义理解和生成能力,能够处理各种复杂的…

【效率提升】maven 转 gradle 实战 | 京东云技术团队

一、灵魂三问 1、gradle 是什么? 一个打包工具, 是一个开源构建自动化工具,足够灵活,可以构建几乎任何类型的软件,高性能、可扩展、能洞察等。其中洞察,可以用于分析构建过程中数据,提供分析参…

想学python找不到合适的书籍?它来了!入门python只需要这一本书就够了!

想学python找不到合适的书籍?看了视频还是不知如何下手? 《python王者归来》 它来了!由清华大学出版社出版!入门python只需要这一本书就够了! 【PDF版领取见文末】 这是一本python入门书。无论你是计算机专业的大学生…

C语言之字符函数字符串函数篇(1)

目录 前言 求字符串长度 strlen strlen统计的是字符串\0之前的字符串长度 字符指针 strlen的返回值是无符号整型 strlen的三种模拟实现 计数器 函数递归 指针_指针 长度不受限制的字符串函数 strcpy strcpy会将源字符串中的 \0 拷贝到目标空间 strcpy参数目标空…

echarts添加点击事件

实现效果:点击图表,弹出该数据下对应得详情 官方文档: 封装的图表组件中: 点击获取点击得对象,进而将需要的参数传给父组件,在父组件中再去请求接口获取更多信息 this.chart.on(click, (params)> {th…

Docker 安装Redis(集群)

3主3从redis集群配置 1、新建6个docker容器 redis 实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 docker run -d --name redis-node-2 --ne…

聚焦云原生安全|如何为5G边缘云和工业互联网应用筑牢安全防线

9月22日,2023年中国信息通信业发展高层论坛5G工业互联网分论坛在北京顺利举办。 作为国内云原生安全领导厂商,安全狗受邀出席此次活动。 据悉,中国信息通信业发展高层论坛是致力于研究信息通信业发展新问题、新趋势,推动信息通信…

使用vite插件进行低代码平台自定义开发(手机版自定义范例)

前言 Youtube上的前端网红「Theo」在React文档仓库发起了一个Pull request,号召React文档不要再默认推荐CRA(create react app),而是应该将Vite作为构建应用的首选。 vite的影响力已经从vue蔓延到了react,可见在前端工程化开发中&#xff0c…

如何使用ArcGIS Pro将等高线转DEM

通常情况下,我们拿到的等高线数据一般都是CAD格式,如果要制作三维地形模型,使用栅格格式的DEM数据是更好的选择,这里就为大家介绍一下如何使用ArcGIS Pro将等高线转DEM,希望能对你有所帮助。 创建TIN 在工具箱中选择“…