照合順序の命名規則
照合順序の名前は、対応する文字セットの名前で始まり、サフィックスで終わります。_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%'; # RDS インスタンスのグローバルな照合順序パラメーターを表示します。
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] パラメーターの変更には、インスタンスの再起動が必要です。影響を最小限に抑えるため、この操作はオフピーク時間に行ってください。
手順
-
ApsaraDB RDS コンソールにログインします。
-
ページ左上のリージョン選択欄で、インスタンスが配置されているリージョンを選択します。
-
ターゲットインスタンスを見つけ、その ID をクリックします。
-
左側のナビゲーションペインで、[パラメーター] をクリックします。
-
[編集可能なパラメータ] タブで [character_set_server] パラメータを見つけ、その横にある編集アイコン
をクリックして値を目的の文字セット (例: utf8) に設定し、[OK] をクリックします。 -
右上の [変更を適用] をクリックし、表示される確認ダイアログボックスで [OK] をクリックします。 その後、インスタンスは再起動されます。
説明特権アカウントを持つインスタンスの場合、この変更は新しく作成されたデータベースにのみ適用され、既存のデータベースには影響しません。
SQL ステートメントを使用した文字セットの変更
構文:
# データベースを変更するには
ALTER DATABASE <database_name> CHARACTER SET <character_set_name> COLLATE <collation_name>;
# テーブルを変更するには
ALTER TABLE <table_name> CONVERT TO CHARACTER SET <character_set_name> COLLATE <collation_name>;
# カラムを変更するには
ALTER TABLE <table_name> MODIFY <column_name> <data_type> CHARACTER SET <character_set_name> COLLATE <collation_name>;
例: 次の SQL ステートメントは、データベース、テーブル、カラムの文字セットを 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 ステートメントは、テーブルにメタデータロックを適用します。
-
デフォルト以外の文字セットを使用するには、データベース、テーブル、カラムなどのオブジェクトに対して明示的に定義する必要があります。MySQL は、サーバー、データベース、テーブル、カラムの 4 つのレベルで文字セット設定を適用します。特に指定しない限り、各レベルは上位レベルのデフォルトを継承します。テーブル内のカラムの文字セットを確認するには、
SHOW CREATE TABLE tableName;またはSHOW FULL FIELDS FROM tableName;コマンドを実行します。