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」を使用する。
-
MySQLデータベースのバックアップ方法を徹底解説!phpMyAdmin・mysqldump・Cronジョブ・WordPressプラグインの使い方
MySQLはリレーショナルデータベース管理システム(RDBMS)の一つです。データベースへの命令を処理し、複数のデータベースを同時に管理することができます。 例えば、新しいデータベースを作成したい場合や、既存のデータベースにデータを追加したい場合は、MySQLサーバーに対してメッセージを送り、追加したいデータとその保存先を指定します。 ビジネスの規模が小さくても大きくても、データは欠かせない重要な資産です。貴重な情報を破損・盗難・災害などの被害から守るためには、MySQLデータベースのバックアップが不可欠です。この記事では、その具体的な方法をいくつかご紹介します。 phpMyAdminを使っ
-
MySQLデータベースの作成と選択方法をわかりやすく解説
データベースの作成MySQLでは、CREATE DATABASE文を使うことで新しいデータベースを作成できます。基本的な構文は以下の通りです。CREATE DATABASE databaseName;実行例ここでは「STUDENT」という名前のデータベースを作成してみましょう。CREATE DATABASE STUDENT;MySQLデータベースの選択作成済みの特定のデータベースにアクセスして操作を行いたい場合は、USE文を使用します。構文mysql> USE databaseName Database changedコマンドを実行すると「Database changed」と表示され、指