字元序命名規則
以字元序對應的字元集名稱開頭,以 _ci(大小寫不敏感)、_cs(大小寫敏感)、_bin(按編碼值比較,大小寫敏感)結尾。
例如:當會話的collation_connection設定為字元序utf8_general_ci時,字元a和字元A是等價的;而當其設定為utf8_bin 時,字元a和字元A是不等價的。
請參考以下樣本:
(xxx.mysql.rds.aliyuncs.com) [xxx]> show variables like 'coll%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
(xxx.mysql.rds.aliyuncs.com) [xxx]> select count(*) from t where 'a' = 'A';
+----------+
| count(*) |
+----------+
| 16 |
+----------+
1 row in set (0.00 sec)
(xxx.mysql.rds.aliyuncs.com) [xxx]> set collation_connection='utf8_bin';
Query OK, 0 rows affected (0.00 sec)
(xxx.mysql.rds.aliyuncs.com) [xxx]> show variables like 'coll%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8_bin |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
(xxx.mysql.rds.aliyuncs.com) [xxx]> select count(*) from t where 'a' = 'A';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
字元集相關 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; #修改表字元集和字元序
樣本:執行 show create database 命令後,輸出結果中 DEFAULT CHARACTER SET utf8 表示該資料庫的預設字元集為 utf8。
mysql> show create database xxx;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| xxx | CREATE DATABASE xxx /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)
控制台修改字元集參數(character_set_server)的方法
修改參數character_set_server需要重啟執行個體,建議在業務低峰期進行操作。
操作步驟
-
登入RDS管理主控台。
-
在頁面左上方,選擇執行個體所在地區。
-
找到目標執行個體,單擊執行個體ID。
-
在左側導覽列中單擊參數設定。
-
在可修改參數頁簽下尋找到character_set_server,單擊右側
進行修改並單擊確定。找到 character_set_server 參數,單擊其右側的編輯表徵圖,將參數值修改為目標字元集(如 utf8)。 -
在右上方單擊提交參數,在彈出的對話方塊中單擊確定,等待執行個體重啟。
說明該參數修改後,僅對開啟高許可權帳號的執行個體後來建立的資料庫有效,對當前資料庫無效。
使用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 字元集,命令如下:
alter database dbsdq character set utf8mb4 collate utf8mb4_unicode_ci;
use dbsdq;
alter table tt2 convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table tt2 modify c2 varchar(10) character set utf8mb4 collate utf8mb4_unicode_ci;
-
修改列時,當前列中的所有行都會立即轉化為新的字元集。
-
alter table會對錶加中繼資料鎖(metadata lock)。
-
如果需要指定字元集,則需要單獨修改,否則會跟隨預設設定的全域伺服器層級字元集。字元集的設定有四級:伺服器級、資料庫級、表級、欄位級。前三種均為預設設定,建議用
SHOW CREATE TABLE tableName;或SHOW FULL FIELDS FROM tableName;來檢查當前表中欄位的字元集設定。