MySQLでデータベースとテーブルの文字コード設定を変更する手順(utf8からutf8mb4など) #mysql version 3
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
MySQLでデータベースとテーブルの文字コード設定を変更する手順(utf8からutf8mb4など) #mysql
要するに `utf8` になってしまっているのを `utf8mb4` にしたい、とか。
以前の担当者とかが何も知らないまま `utf8` に設定していて、あるとき絵文字を入力して問題が発覚すること、ありますよね…。
## 現在の設定の確認
データベース自体の設定を確認。
```sql
show variables like "chara%";
```
あとは `/etc/my.cnf` の次のような記述あたり(設定されていれば)。
```:my.cnf
[mysqld]
character-set-server=utf8mb4
collation_server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
```
各テーブルの設定については `show create table` するなりする。
## 変更していく手順
大丈夫だと思うけれど、作業前にバックアップを忘れずに。
`/etc/my.cnf`の設定を変更してrestart
### my.cnfの書き換え
MySQL 5.7.7以前を利用している場合、`/etc/my.cnf`の設定を変更してrestartする。5.7.7以降では以下の設定がデフォルト。
```:my.cnf
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
```
`Index column size too large. The maximum column size is 767 bytes.` のエラーが出ないように拡張する。`Barracuda`は`innodb_large_prefix`を利用するために必要。
### databaseの文字コード変更
データベース自体の文字コード変更。
```sql
alter database <DBNAME> character set utf8mb4 collate utf8mb4_general_ci;
```
テーブルのrow_format変更と文字コード変更(それぞれのテーブルに対して実施)。
### テーブルごとのrow_formatと文字コード変更
テーブルの`row_format`変更(MySQL 5.7.9以前を利用している場合)と文字コード変更(それぞれのテーブルに対して実施)。5.7.9以降は`ROW_FORMAT=DYNAMIC`がデフォルトなので変更の必要なし。
```sql
alter table <TABLENAME> ROW_FORMAT=DYNAMIC;
alter table <TABLENAME> convert to character set utf8mb4 collate utf8mb4_general_ci;
```
### クライアントアプリケーションの文字コード変更
もしWebアプリケーション側で接続時に文字コードを指定しているのであれば、その文字コード指定も改めて変更する。
要するに utf8
になってしまっているのを utf8mb4
にしたい、とか。
以前の担当者とかが何も知らないまま utf8
に設定していて、あるとき絵文字を入力して問題が発覚すること、ありますよね…。
現在の設定の確認
データベース自体の設定を確認。
show variables like "chara%";
あとは /etc/my.cnf
の次のような記述あたり(設定されていれば)。
[mysqld]
character-set-server=utf8mb4
collation_server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
my.cnf各テーブルの設定については show create table
するなりする。
変更していく手順
大丈夫だと思うけれど、作業前にバックアップを忘れずに。
my.cnfの書き換え
MySQL 5.7.7以前を利用している場合、/etc/my.cnf
の設定を変更してrestartする。5.7.7以降では以下の設定がデフォルト。
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
my.cnfIndex column size too large. The maximum column size is 767 bytes.
のエラーが出ないように拡張する。Barracuda
はinnodb_large_prefix
を利用するために必要。
databaseの文字コード変更
データベース自体の文字コード変更。
alter database <DBNAME> character set utf8mb4 collate utf8mb4_general_ci;
テーブルごとのrow_formatと文字コード変更
テーブルのrow_format
変更(MySQL 5.7.9以前を利用している場合)と文字コード変更(それぞれのテーブルに対して実施)。5.7.9以降はROW_FORMAT=DYNAMIC
がデフォルトなので変更の必要なし。
alter table <TABLENAME> ROW_FORMAT=DYNAMIC;
alter table <TABLENAME> convert to character set utf8mb4 collate utf8mb4_general_ci;
クライアントアプリケーションの文字コード変更
もしWebアプリケーション側で接続時に文字コードを指定しているのであれば、その文字コード指定も改めて変更する。