MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLデータベースの文字セットと照合順序をUTF-8に変換する方法

はじめに

MySQLで日本語などのマルチバイト文字を正しく扱うには、データベースの文字セット(キャラクタセット)と照合順序(コレーション)を適切に設定することが重要です。本記事では、使用中のMySQLバージョンの確認方法から、現在の文字セットの照会、そしてUTF-8への変更手順までを順を追って解説します。

1. 使用中のMySQLバージョンを確認する

まず、version()関数を使って、現在使用しているMySQLのバージョンを確認しましょう。次のクエリを実行します。

mysql> SELECT version();

実行結果は以下の通りです。

+-----------+
| version() |
+-----------+
| 8.0.12    |
+-----------+
1 row in set (0.00 sec)

この出力から、MySQL 8.0.12が使用されていることがわかります。

2. 現在の文字セットを確認する

次に、information_schemaを参照して、対象テーブルに設定されている文字セットを確認します。以下の構文を使用します。

SELECT CCSA.character_set_name
FROM information_schema.`TABLES` T,
     information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "yourDatabaseName"
  AND T.table_name = "yourTableName";

実際に「sample」データベースの「mytable」テーブルに対して実行してみましょう。

mysql> SELECT CCSA.character_set_name
    -> FROM information_schema.`TABLES` T,
    ->      information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
    -> WHERE CCSA.collation_name = T.table_collation
    ->   AND T.table_schema = "sample"
    ->   AND T.table_name = "mytable";

実行結果は以下の通りです。

+--------------------+
| CHARACTER_SET_NAME |
+--------------------+
| utf8mb4            |
+--------------------+
1 row in set (0.00 sec)

この結果から、「mytable」にはutf8mb4が設定されていることが確認できます。

3. データベースの文字セットをutf8に変更する

ALTER DATABASE文を使用すると、データベース全体のデフォルト文字セットと照合順序を変更できます。ここでは、文字セットをutf8、照合順序をutf8_general_ciに設定します。

mysql> ALTER DATABASE sample CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 1 warning (0.27 sec)

4. 変更後の状態を確認する

再度同じクエリを実行し、変更が反映されているかどうかチェックします。

mysql> SELECT CCSA.character_set_name
    -> FROM information_schema.`TABLES` T,
    ->      information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
    -> WHERE CCSA.collation_name = T.table_collation
    ->   AND T.table_schema = "sample"
    ->   AND T.table_name = "mytable";

実行結果は以下の通りです。

+--------------------+
| CHARACTER_SET_NAME |
+--------------------+
| utf8mb4            |
+--------------------+
1 row in set (0.00 sec)

注意点:既存テーブルには自動的に反映されない

注目すべき点として、ALTER DATABASEを実行した後も、既存テーブルの文字セットはutf8mb4のまま表示されています。これは、ALTER DATABASEによる変更が「今後新しく作成されるテーブル」に対してのみ適用されるためです。
既存のテーブル自体の文字セットを変換したい場合は、ALTER TABLE文にCONVERT TOを組み合わせて使用します。

mysql> ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

また、MySQL 8.0では「utf8」はutf8mb3のエイリアスであり非推奨となっているため、先ほどの出力にwarningが表示されました。絵文字など4バイト文字も扱いたい場合は、utf8mb4とutf8mb4_unicode_ci(またはutf8mb4_0900_ai_ci)の使用が推奨されます。

まとめ

  • version()関数で使用中のMySQLバージョンを確認できる。
  • information_schemaのTABLESとCOLLATION_CHARACTER_SET_APPLICABILITYを結合することで、テーブルに設定された文字セットを調べられる。
  • ALTER DATABASE文でデータベースのデフォルト文字セットを変更できるが、既存テーブルには反映されない。
  • 既存テーブルを変換するには「ALTER TABLE ~ CONVERT TO CHARACTER SET」を使用する。
  1. MySQLデータベースのバックアップ方法を徹底解説!phpMyAdmin・mysqldump・Cronジョブ・WordPressプラグインの使い方

    MySQLはリレーショナルデータベース管理システム(RDBMS)の一つです。データベースへの命令を処理し、複数のデータベースを同時に管理することができます。 例えば、新しいデータベースを作成したい場合や、既存のデータベースにデータを追加したい場合は、MySQLサーバーに対してメッセージを送り、追加したいデータとその保存先を指定します。 ビジネスの規模が小さくても大きくても、データは欠かせない重要な資産です。貴重な情報を破損・盗難・災害などの被害から守るためには、MySQLデータベースのバックアップが不可欠です。この記事では、その具体的な方法をいくつかご紹介します。 phpMyAdminを使っ

  2. MySQLデータベースの作成と選択方法をわかりやすく解説

    データベースの作成MySQLでは、CREATE DATABASE文を使うことで新しいデータベースを作成できます。基本的な構文は以下の通りです。CREATE DATABASE databaseName;実行例ここでは「STUDENT」という名前のデータベースを作成してみましょう。CREATE DATABASE STUDENT;MySQLデータベースの選択作成済みの特定のデータベースにアクセスして操作を行いたい場合は、USE文を使用します。構文mysql> USE databaseName Database changedコマンドを実行すると「Database changed」と表示され、指