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

投稿者: | 2017年10月16日

この記事は最終更新から 735日 が経過しています。

(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], -p[password] : パスワード
–execute=statement, -e statement : SQLコマンド

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

まずはDBを変更する。

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" 

続けてテーブルおよびカラムを変更する。
ダンプ出力してごっそり変更しリストアする。

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")

あとで清書しよう。


コメントを残す

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