(68) MySQLの文字コードをUTF-8からUTF-8 MB4に変更する。

投稿者: | 2017年10月16日

(1) やりたいこと

レンタルサーバーにインストールされている MySQLのバージョンが 5.1 から 5.7 に上がった。
これにより、4バイトUTF8文字が使えるようになった。
すなわち絵文字が使えるようになった。
これを使いたい!

でも、自動的にデータベースを 4バイト対応UTF-8 に変えてくれるわけではないので、自分でせっせと変更する。

(2) 変更作業

以下、備忘録として手順を記しておく。

mysqlコマンドのオプションはこちらの公式サイトに詳しく書かれている。
https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

今回使用したオプションは以下の通り。

–user=user_name-u user_nameユーザー名
–database=db_name-D db_nameデータベース名
–password=password-ppasswordパスワード pの後の空白文字はNG
–execute=statement-e statementSQLコマンド

1) データベースのデフォルト文字コードを UTF8 から UTF8MB4 に変更する。

まずは DBの character set を変更する。

DATABASE=xxxxxx
USERNAME=yyyyyy
PASSWORD=zzzzzz

SQLCMD="ALTER DATABASE ${DATABASE} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" 
SHOWDH="show variables like \"chara%\";" 

mysql -u $USERNAME -D $DATABASE -p$PASSWORD -e "$SHOWDH" 
mysql -u $USERNAME -D $DATABASE -p$PASSWORD -e "$SQLCMD" 
mysql -u $USERNAME -D $DATABASE -p$PASSWORD -e "$SHOWDH" 

続けてテーブルおよびカラムの character set を変更する。
ダンプ出力して一気に置換・変更し、リストアする。

DUMP1=mydb.dump
DUMP2=mydb_new.dump
/usr/local/mysql/bin/mysqldump $DATABASE -h localhost -u $USERNAME -p$PASSWORD -e --single-transaction > $DUMP1

sed -e "s/CHARSET=utf8/CHARSET=utf8mb4/g" $DUMP1 > $DUMP2

mysql -u $USERNAME -p$PASSWORD  -D$DATABASE < $DUMP2

2) データベースを使用しているプログラム中の文字コード指定を変更する。

db = new mysqli("localhost", USER, PW, NAME);
db->set_charset("utf8mb4")

あとで清書しよう。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です