首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Amazon RDS MySQL 正確存儲中文字符完整配置指南

     編輯:MySQL 綜合教學

Amazon RDS MySQL 正確存儲中文字符完整配置指南

在 Amazon RDS for MySQL 中存儲中文字符時,若配置不當會導致數據顯示為 ????。本文提供從參數組修改到數據庫/表級字符集調整的完整解決方案。

問題現象

雖然實例級參數已設為 utf8:

mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
+--------------------------+-------------------------------------------+

但寫入中文仍顯示亂碼,原因在於現有數據庫與表的字符集定義未同步更新。

解決方案:三層級字符集調整

使用 MySQL 客戶端連接 RDS 端點(需先在安全組入站規則添加當前 IP):

mysql -u USERNAME -pPASSWORD -h ENDPOINT DATABASENAME

注意:-p 與密碼之間無空格;ENDPOINT 為控制台顯示的終端節點(不含端口)。

1. 數據庫級調整

ALTER DATABASE `DATABASENAME` CHARACTER SET utf8 COLLATE utf8_unicode_ci;

2. 表級調整(新寫入數據)

ALTER TABLE `TABLENAME` CHARACTER SET utf8 COLLATE utf8_unicode_ci;

3. 表級調整(現有數據轉換)

ALTER TABLE `TABLENAME` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

關鍵區別:

  • CHARACTER SET 僅修改表默認字符集,影響後續新建列/數據
  • CONVERT TO 會重建表並轉換現有數據編碼,必須執行此步驟 修復已存儲的亂碼

批量處理腳本示例

若表較多,可生成批量 SQL:

SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DATABASENAME';

將輸出結果複製執行即可完成全庫轉換。

驗證測試

INSERT INTO test_chinese (col) VALUES ('測試中文');
SELECT * FROM test_chinese;

若正常顯示中文,配置生效。建議同步檢查應用端連接字符串是否包含 characterEncoding=utf8 參數。

補充說明

  • RDS 5.7+ 推薦使用 utf8mb4 完整支援 Emoji 等 4 字節字符
  • 參數組修改需重啟實例生效,但字符集參數屬於動態參數,SET GLOBAL 即時生效
  • 若使用 CloudFormation 創建實例,可在模板中指定 CharacterSetName: utf8

參考資源:
MySQL 官方字符集配置文檔 | AWS CloudFormation 字符集參數

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved