將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
繁體地址,請注明出處:http://hk.pswp.cn/web/83787.shtml
英文地址,請注明出處:http://en.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) 負類: 指的是與陽性相反的類別或事件。…