RDS For MySQL 字符集相關說明

https://help.aliyun.com/knowledge_detail/41706.html?spm=5176.7841698.2.9.F5YjI5


1. 字符序命名規則

以字符序對應的字符集名稱開頭,以 _ci(大小寫不敏感)、_cs(大小寫敏感)、_bin(按編碼值比較,大小寫敏感)結尾。html

例如:當會話的 collation_connction 設置爲字符序 utf8_general_ci 時,字符 a 和字符 A 是等價的;sql

而當其設置爲 utf8_bin 時,字符 a 和字符 A 是不等價的。數據庫

請參考如下示例:服務器

 

 

2. 字符集相關 MySQL 命令

show global variables like '%char%'; #查看RDS實例字符集相關參數設置 show global variables like 'coll%'; #查看當前會話字符序相關參數設置 show character set; #查看實例支持的字符集 show collation; #查看實例支持的字符序 show create table table_name \G #查看錶字符集設置 show create database database_name \G #查看數據庫字符集設置 show create procedure procedure_name \G #查看存儲過程字符集設置 show procedure status \G #查看存儲過程字符集設置 alter database db_name default charset utf8; #修改數據庫的字符集 create database db_name character set utf8; #建立數據庫時指定字符集 alter table tab_name default charset utf8 collate utf8_general_ci; #修改表字符集和字符序

示例如圖: 數據庫設計

 

3. 控制檯修改字符集參數(character_set_server)的方法:

在 RDS 實例控制檯  參數設置 , 點擊"筆" 樣圖標, 如圖: 
ui

 

"肯定"   "提交參數" 便可,  如圖:編碼

 

注: 該參數修改後, 僅對開啓高權限帳號的實例後來建立的數據庫有效. 對當前數據庫無效.spa

 4. 使用 sql 語句修改數據庫字符集的方法:

語法以下: 設計

修改庫:    
ALTER DATABASE 庫名 CHARACTER SET 字符集名稱 COLLATE 排序規則名稱; 修改表: ALTER TABLE 表名 CONVERT TO CHARACTER SET 字符集名稱  COLLATE 排序規則名稱; 修改一列: ALTER TABLE 表名 MODIFY 列名 字段類型 CHARACTER SET 字符集名稱  COLLATE 排序規則名稱;

示例: 下面三條sql 分別將庫 dbsdq , 表 tt2 , 表 tt2 中的 c2 列修改成utf8mb4 字符集, 代碼以下: 3d

alter database dbsdq character set utf8mb4 collate utf8mb4_unicode_ci; use dbsdq; alter table tt2 character set utf8mb4 collate utf8mb4_unicode_ci; alter table tt2 modify c2 varchar(10) character set utf8mb4;

如圖: 

 

注意:

5. 如何保證數據庫字符集編碼正確設置:

在數據庫中字符集是在數據庫設計的過程當中須要詳細考慮的一點,用戶須要根據您的業務場景、用戶數據等方面來考慮。

    • 查看數據庫中設置字符集的參數 

      代碼:

  • show variables like '%character%';
    結果如圖:

   

 

在下面的各參數必須須要保證除了character_set_filesystem外的全部的參數都保持統一才能夠保證字符編碼不會出現亂碼的狀況。

character_set_client、character_set_connection 以及 character_set_results 這幾個參數都是客戶端的設置

character_set_system、character_set_server 以及 character_set_database 是指服務器端的設置。

而對於這三個服務器端的參數來講的優先級是:
列級字符集 > 表級字符集 > character_set_database > character_set_server > character_set_system
列級的字符編碼在服務器端是具備最高優先級的。

 

  • 如何可以保證咱們的這些字段是一致的?

客戶端字符集: 可經過以下方式來定義對應的character_set_client、character_set_connection以及character_set_results這幾個參數。例如:

set names utf8;

服務器端字符集: 因設置有不一樣的等級,首先對於 character_set_system 暫時不提供更改,可是因爲其優先級最低所以影響不大。

character_set_server的修改見上面 第 3 項 . 此處再也不重複說明. 

而對於character_set_database則是則是在數據庫建立的時候指定的,如圖:

 

作到上述的設置以後基本上能夠保證字符編碼不會出現亂碼,對於在代碼中設置客戶端的字符編碼的時候建議也能夠經過 set names XXX; 來修改客戶端的設置,而後再進行相關的操做。

 

若是問題還未能解決,請聯繫售後技術支持

相關文章
相關標籤/搜索