目錄
一、場景
二、問題
三、原因
四、解決方案
五、拓展(全表全字段修改字符集一鍵更改)
準備工作:做好整個庫備份
1. 全表一鍵修改
Stage 1:運行如下查詢
Stage 2:復制sql語句
Stage 3:執行即可
2. 全字段一鍵修改?
Stage 1:運行如下查詢
Stage 2:復制sql語句
Stage 3:執行即可
注意事項:
一、場景
-
mysql 5.7.28
-
mybatis-plus
-
spring boot 2.5.4
-
navicate 15
二、問題
????????英文查詢正常,中文查詢結果集為0
?
三、原因
? ? ? ? mybatis-plus 使用?WHERE BINARY查詢 ,字符集不統一(數據庫,表,字段),導致中文無法查詢出來
四、解決方案
-
需要統一為:? utf8mb4
-
排序為: utf8mb4_general_ci
# 說明,替換下面3個參數即可
# database_name :數據庫名
# table_name:表名
# column_name:字段名# 修改庫字符集ALTER DATABASE `database_name` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;# 修改表ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;# 修改表中字段ALTER TABLE `table_name` MODIFY COLUMN `column_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-
注意:如果修改字符集后,任然查不出來,需要將中文字符復制進去保存改條數據,再查詢驗證
五、拓展(全表全字段修改字符集一鍵更改)
準備工作:做好整個庫備份
1. 全表一鍵修改
Stage 1:運行如下查詢
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';
Stage 2:復制sql語句
Stage 3:執行即可
2. 全字段一鍵修改?
Stage 1:運行如下查詢
SELECTTABLE_SCHEMA '數據庫',data_type '數據類型',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=1
-- AND COLLATION_NAME != 'utf8mb4_general_ci'AND COLUMN_NAME != 'id'AND data_type not in('bigint','int','datetime','decimal','tinyint','double','float','json') AND TABLE_SCHEMA NOT IN ('mysql','performance_schema','sys','information_schema','mysql_ha','mysql_db_monitor');
Stage 2:復制sql語句
Stage 3:執行即可
注意事項:
1. 有些字段是關鍵字,無法執行,報錯到該行注釋即可
2. 有點字段類型不能設置字符集,報錯到該行注釋即可