将MySQL数据库中所有表和字段编码统一改为utf8mb4_unicode_ci

完整操作步骤

1. 首先修改数据库默认字符集

sql

ALTER DATABASE `你的数据库名` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 生成批量修改所有表的SQL语句

sql

SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
) AS alter_statement
FROM information_schema.tables
WHERE table_schema = '你的数据库名'
AND table_type = 'BASE TABLE';

3. 生成批量修改所有字段的SQL语句(确保字段也统一)

sql

SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, '` MODIFY `', column_name, '` ', column_type, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',IF(is_nullable = 'NO', ' NOT NULL', ''),IF(column_default IS NOT NULL, CONCAT(' DEFAULT \'', column_default, '\''), ''),' COMMENT \'', IFNULL(column_comment, ''), '\';'
) AS alter_column_statement
FROM information_schema.columns
WHERE table_schema = '你的数据库名'
AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext', 'enum', 'set')
AND collation_name != 'utf8mb4_unicode_ci';

4. 使用存储过程自动执行所有修改

sql

DELIMITER //
CREATE PROCEDURE convert_all_to_utf8mb4(IN db_name VARCHAR(64))
BEGINDECLARE done INT DEFAULT FALSE;DECLARE tbl_name VARCHAR(64);DECLARE col_name VARCHAR(64);DECLARE col_type TEXT;DECLARE is_null VARCHAR(3);DECLARE col_default TEXT;DECLARE col_comment TEXT;-- 声明游标获取所有表DECLARE cur_tables CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = db_name AND table_type = 'BASE TABLE';-- 声明游标获取所有需要修改的列DECLARE cur_columns CURSOR FOR SELECT table_name, column_name, column_type, is_nullable, column_default, column_comment FROM information_schema.columns WHERE table_schema = db_name AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext', 'enum', 'set')AND collation_name != 'utf8mb4_unicode_ci';DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- 禁用外键检查SET FOREIGN_KEY_CHECKS = 0;-- 修改所有表OPEN cur_tables;tables_loop: LOOPFETCH cur_tables INTO tbl_name;IF done THENLEAVE tables_loop;END IF;SET @sql = CONCAT('ALTER TABLE `', db_name, '`.`', tbl_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;SELECT CONCAT('Converted table: ', tbl_name) AS message;END LOOP;CLOSE cur_tables;-- 重置完成标志SET done = FALSE;-- 修改所有列OPEN cur_columns;columns_loop: LOOPFETCH cur_columns INTO tbl_name, col_name, col_type, is_null, col_default, col_comment;IF done THENLEAVE columns_loop;END IF;SET @sql = CONCAT('ALTER TABLE `', db_name, '`.`', tbl_name, '` MODIFY `', col_name, '` ', col_type,' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',IF(is_null = 'NO', ' NOT NULL', ''),IF(col_default IS NOT NULL, CONCAT(' DEFAULT \'', col_default, '\''), ''),IF(col_comment IS NOT NULL AND col_comment != '', CONCAT(' COMMENT \'', col_comment, '\''), ''));PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;SELECT CONCAT('Converted column: ', tbl_name, '.', col_name) AS message;END LOOP;CLOSE cur_columns;-- 恢复外键检查SET FOREIGN_KEY_CHECKS = 1;SELECT 'All tables and columns have been converted to utf8mb4_unicode_ci' AS result;
END //
DELIMITER ;-- 调用存储过程
CALL convert_all_to_utf8mb4('你的数据库名');-- 使用后可以删除存储过程
DROP PROCEDURE IF EXISTS convert_all_to_utf8mb4;

5. 验证修改结果

sql

-- 检查所有表的字符集
SELECT table_name, table_collation 
FROM information_schema.tables 
WHERE table_schema = '你的数据库名';-- 检查所有列的字符集
SELECT table_name, column_name, collation_name 
FROM information_schema.columns 
WHERE table_schema = '你的数据库名'
AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext', 'enum', 'set');

重要注意事项

  1. 备份数据库:执行前务必备份整个数据库

  2. 停机维护:大型数据库转换可能需要较长时间,建议在维护窗口期操作

  3. 连接设置:确保应用程序连接MySQL时也使用utf8mb4字符集

    sql

    SET NAMES utf8mb4;
  4. 索引限制:utf8mb4字符集的索引长度限制是utf8的3/4,可能需要调整某些索引

  5. 存储空间:utf8mb4占用的存储空间可能比原来的字符集更多

后续配置

修改MySQL配置文件(my.cnf或my.ini),确保新创建的表默认使用utf8mb4:

text

[client]
default-character-set = utf8mb4[mysql]
default-character-set = utf8mb4[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

这样设置后,新创建的表和字段都会默认使用utf8mb4字符集。

# 查询编码不一致的表
SELECTtable_schema,table_name,table_collation 
FROMinformation_schema.TABLES 
WHEREtable_schema = 'daysurgery_restructure' AND table_collation != ( SELECT DEFAULT_COLLATION_NAME FROM information_schema.schemata WHERE schema_name = 'daysurgery_restructure' ) 
ORDER BYtable_collation;# 修改数据库编码
ALTER DATABASE `daysurgery_restructure` CHARACTER 
SET utf8mb4 COLLATE utf8mb4_unicode_ci;# 生成批量修改所有表的SQL语句
SELECTCONCAT( 'ALTER TABLE `', table_schema, '`.`', table_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;' ) AS alter_statement 
FROMinformation_schema.TABLES 
WHEREtable_schema = 'daysurgery_restructure' AND table_type = 'BASE TABLE';# 生成批量修改所有字段的SQL语句(确保字段也统一)
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, '` MODIFY `', column_name, '` ', column_type, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',IF(is_nullable = 'NO', ' NOT NULL', ''),IF(column_default IS NOT NULL, CONCAT(' DEFAULT \'', column_default, '\''), ''),' COMMENT \'', IFNULL(column_comment, ''), '\';'
) AS alter_column_statement
FROM information_schema.columns
WHERE table_schema = 'daysurgery_restructure'
AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext', 'enum', 'set')
AND collation_name != 'utf8mb4_unicode_ci';# 使用存储过程自动执行所有修改
DELIMITER //
CREATE PROCEDURE convert_all_to_utf8mb4(IN db_name VARCHAR(64))
BEGINDECLARE done INT DEFAULT FALSE;DECLARE tbl_name VARCHAR(64);DECLARE col_name VARCHAR(64);DECLARE col_type TEXT;DECLARE is_null VARCHAR(3);DECLARE col_default TEXT;DECLARE col_comment TEXT;-- 声明游标获取所有表DECLARE cur_tables CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = db_name AND table_type = 'BASE TABLE';-- 声明游标获取所有需要修改的列DECLARE cur_columns CURSOR FOR SELECT table_name, column_name, column_type, is_nullable, column_default, column_comment FROM information_schema.columns WHERE table_schema = db_name AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext', 'enum', 'set')AND collation_name != 'utf8mb4_unicode_ci';DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- 禁用外键检查SET FOREIGN_KEY_CHECKS = 0;-- 修改所有表OPEN cur_tables;tables_loop: LOOPFETCH cur_tables INTO tbl_name;IF done THENLEAVE tables_loop;END IF;SET @sql = CONCAT('ALTER TABLE `', db_name, '`.`', tbl_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;SELECT CONCAT('Converted table: ', tbl_name) AS message;END LOOP;CLOSE cur_tables;-- 重置完成标志SET done = FALSE;-- 修改所有列OPEN cur_columns;columns_loop: LOOPFETCH cur_columns INTO tbl_name, col_name, col_type, is_null, col_default, col_comment;IF done THENLEAVE columns_loop;END IF;SET @sql = CONCAT('ALTER TABLE `', db_name, '`.`', tbl_name, '` MODIFY `', col_name, '` ', col_type,' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',IF(is_null = 'NO', ' NOT NULL', ''),IF(col_default IS NOT NULL, CONCAT(' DEFAULT \'', col_default, '\''), ''),IF(col_comment IS NOT NULL AND col_comment != '', CONCAT(' COMMENT \'', col_comment, '\''), ''));PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;SELECT CONCAT('Converted column: ', tbl_name, '.', col_name) AS message;END LOOP;CLOSE cur_columns;-- 恢复外键检查SET FOREIGN_KEY_CHECKS = 1;SELECT 'All tables and columns have been converted to utf8mb4_unicode_ci' AS result;
END //
DELIMITER ;-- 调用存储过程
CALL convert_all_to_utf8mb4('daysurgery_restructure');-- 使用后可以删除存储过程
DROP PROCEDURE IF EXISTS convert_all_to_utf8mb4;5. 验证修改结果
sql
-- 检查所有表的字符集
SELECT table_name, table_collation 
FROM information_schema.tables 
WHERE table_schema = 'daysurgery_restructure';-- 检查所有列的字符集
SELECT table_name, column_name, collation_name 
FROM information_schema.columns 
WHERE table_schema = 'daysurgery_restructure'
AND data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext', 'enum', 'set');

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jupyterhub的浅浅使用-重点在解决无法登录

jupyterhub的浅浅使用-重点在解决无法登录 jupyterhub的浅浅使用-重点在解决无法登录1、jupyterhub是什么2、创建Dockerfile3、启动容器3.1、生成配置文件jupyterhub --generate-config3.2、运行容器3.3、进入容器配置用户密码3.4、访问127.0.0.1:8000并登录 4、后台创建的用户…

【Bitcoin基础】比特币的地址格式有哪些?如何应用?

比特币地址格式的分类及应用场景 比特币地址是用于接收和发送比特币的标识符,主要有以下几种格式,每中类型都有其特定的用途和特点: 比特币地址格式 P2PKH 1xxxx leagcy地址 P2SH 3xxxx 允许更复杂的交易多重签名 bech32 bc1xxxx bech32mP2TR…

3.1.2_栈的顺序存储实现

知识总览: 顺序栈的定义: 顺序栈是用顺序存储实现的 ,代码定义方式和顺序表类似(啥是顺序表来着???) 定义一个顺序栈struct结构体SqStack,结构体中有静态数组data来存放栈里边的元素1个int型的…

JavaEE初阶第一期:计算机是如何 “思考” 的(上)

专栏:JavaEE初阶起飞计划 个人主页:手握风云 一、冯诺依曼体系结构 1.1. 概念 冯诺依曼体系结构(Von Neumann Architecture),是现代计算机的基础设计概念,核心思想是“存储程序控制”。具体来说&#xff0c…

SQL Server全局搜索:在整个数据库中查找特定值的高效方法

SQL Server全局搜索:在整个数据库中查找特定值的高效方法 一、需求背景:为什么需要数据库全局搜索? 在数据库管理和开发过程中,我们经常会遇到这样的场景: 只记得某个数据值,但忘记了它所在的表或列需要…

万物皆数:构建数字信号处理的数学基石

万物皆数:构建数字信号处理的数学基石 欢迎来到数字信号处理(DSP)的世界。在这里,声音、图像、通信信号、医疗数据……一切信息都被转化为一串串冰冷的数字。然而,正是通过对这些数字的精妙运算,我们得以实…

到院率最高提升40%,消费医疗用AI营销机器人跑赢增长焦虑

当前,消费医疗机构普遍依赖人工咨询师进行客户接待和营销咨询。然而,专业咨询师缺口高达20万人,大量“护士转咨询”“销售转咨询”现象导致方案设计专业性不足,客户投诉率提升40%。人工客服不仅医学知识薄弱,学习能力有…

【推荐算法】注意力机制与兴趣演化:推荐系统如何抓住用户的心?

注意力机制与兴趣演化:推荐系统如何抓住用户的心? 一、算法背景知识:从静态推荐到动态感知1.1 传统推荐系统的局限性1.2 人类注意力机制的启示 二、算法理论/结构:动态兴趣建模革命2.1 DIN(深度兴趣网络)&a…

快速入门:创建 Azure 数据资源管理器群集和数据库

前言 Azure 数据资源管理器是 Microsoft 提供的一项快速、完全托管的数据分析服务。 它允许用户分析来自应用程序、网站、物联网设备等的海量数据流,从而简化复杂的数据探索。 它能够处理数 PB 的数据,并支持快速检索数据以进行分析。 主要特点 高性能:ADX 针对快速数据提…

Redis集群模式之Redis Cluster(2)

上篇文章我们讲解了Redis Cluster中的主要模块和两种重定向方式,这篇文章我们来讲解一下Redis Cluster的状态监测和维护。 Redis Cluster状态监测及维护 要讲解Redis Cluster中节点的状态如何维护,我们要先知道Redis Cluster中的节点有哪些状态&#xf…

Step-Audio-AQAA 解读:迈向「纯语音」交互的端到端 LALM 新里程

引言:AI 从听到说 大型音频语言模型(Large Audio-Language Models, LALMs)正在彻底改变我们与机器交互的方式。我们不再满足于简单的文本问答,而是期望 AI 能够像人类一样,通过自然的语音进行交流,理解我们的意图,并以富有表现力的声音回应。然而,构建一个能够直接从语…

基于边缘计算的丝杆状态实时监测系统设计?

基于边缘计算的丝杆状态实时监测系统设计,可从系统架构、各层功能设计、关键技术应用等方面入手,以下为详细介绍: 系统架构设计 基于边缘计算的丝杆状态实时监测系统通常由感知层、边缘层和云端三部分组成。感知层负责数据采集,…

LeetCode 每日一题 2025/6/9-2025/6/15

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/9 440. 字典序的第K小数字6/10 3442. 奇偶频次间的最大差值 I6/11 3445. 奇偶频次间的最大差值 II6/12 3423. 循环数组中相邻元素的最大差值6/13 2616. 最小化数对的最大…

PyTorch张量操作中dim参数的核心原理与应用技巧:

今天在搭建神经网络模型中重写forward函数时,对输出结果在最后一个维度上应用 Softmax 函数,将输出转化为概率分布。但对于dim的概念不是很熟悉,经过查阅后整理了一下内容。 PyTorch张量操作精解:深入理解dim参数的维度规则与实践…

Day 31

1. 规范的文件命名 核心原则: 清晰明确:文件名应准确描述内容(如data_preprocessing.py) 风格统一: 推荐小写下划线(Python惯例,如model_training.py) 或使用驼峰式&#xff08…

学习Oracle------认识VARCHAR2

学习Oracle------认识VARCHAR2 VARCHAR2 是 Oracle 数据库中专门用于存储可变长度字符串的数据类型,它是 Oracle 对标准 SQL 数据类型 VARCHAR 的增强和替代。以下是全面解析: 核心概念 名字含义: VAR Variable(可变&#xff09…

记录jackson解析出错

Jackson 属性名大小写 Bug 记录 问题描述 在前后端交互过程中,前端传递的 JSON 字段名为驼峰风格(如 qTitle),后端 Java 实体类字段名也为驼峰(如 private String qTitle;)。 但在反序列化时,…

泰国数码电商系统定制|3C产品详情泰语化+售后管理,适配泰国数码零售

随着全球数字化的加速,电商行业正在迅速发展,尤其是以泰国为代表的东南亚市场。泰国不仅是一个拥有庞大消费者群体的市场,而且其日益增长的互联网使用率和手机普及率使得数码产品的销售潜力巨大。在这样的大背景下,针对泰国市场的…

59、定制化原理-SpringBoot定制化组件的几种方式

59、定制化原理-SpringBoot定制化组件的几种方式 在Spring Boot中,定制化组件的方式多样,以下是几种常见的方法及其原理: #### 修改配置文件 通过修改application.properties或application.yml文件,利用ConfigurationProperties注…

机器学习--分类

阳性(Positive)和阴性(Negative) 阳性(Positive) 正类:通常指的是我们关注的类别或事件;阴性(Negative) 负类: 指的是与阳性相反的类别或事件。…