MySQL 既存テーブルの文字コードをutf8mb4に変換する
- MySQL
-
2023-01-06
この記事は最終更新日から1年以上経過しています。
MySQLのテーブルで文字コードutf8とutf8mb4が混在するシステムをutf8mb4に統一する機会がありました。
そんな時に文字コードや照合順序を確認する方法、変換する方法です。
MySQL:5.7
データベースの文字コードと照合順序を確認する
SELECT
SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE
SCHEMA_NAME = 'データベース名';
テーブルの文字コードと照合順序を確認する
SELECT
TABLE_NAME, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'データベース名';
カラムの文字コードと照合順序を確認する
SELECT
COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'テーブル名';
利用できる照合順序を確認する
文字コードと利用できる照合順序の組み合わせを確認します。
SELECT
COLLATION_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
WHERE
COLLATION_NAME = 'utf8mb4_general_ci';
今回はutf8mb4_general_ciとutf8mb4の組み合わせが出てくればOKです。
データベースの文字コードを変更する
ALTER DATABASE データベース名
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
テーブル内の全ての文字カラムを変換する
テーブルのデフォルト文字コードと、カラムの文字コードを分けて一括で変換できます。
ALTER TABLE テーブル名
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
utf8からutf8mb4に変換する際の注意点
utf8は1文字3バイト、utf8mb4は1文字4バイトとなるため文字カラムについて自動で型が変更される場合があります。
- text型がmediumtext型に変換されます。
- innodb_file_formatがBarracudaでない場合
varchar(255)にインデックスがあると767バイトを超えてしまうためエラーになる。
インデックスキーの最大長が767バイトであるためです。
この記事がお役に立ちましたらシェアお願いします
6,669 views




