4,862 views
(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 statement | SQLコマンド |
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")
あとで清書しよう。