おのたく日記 YouTubeも始めました→
2021-02-27(Sat) [長年日記]
■ [movabletype] データベースが文字化け
movabletypeの7.6.0が出たというのでバージョンアップをするためにデータベースのバックアップを取ろうとしたら、なんが文字が化けてる。
Webコンソールで見ても、名前なども、みんなバケバケ。
何回かmaribadbをアップデートしたのが原因だと思って調べたら、なんとdatabaseの文字コードがlatin1になっていた。で、なんで漢字が使えているのかと思ったら、文字コードがlatin1なのに中身はutf8で入っていることも判明。そこで、
$ mysqldump movabletype --default-character-set=utf8mb4 > latin1.sql
$ perl -pe 's/CHARSET=latin1/CHARSET=utf8/' -e 's/SET NAMES latin1/SET NAMES utf8/' < latin1.sql > utf8.sql
$ mysql bovabletype <utf8.sql
として、データをutf8でバックアップを取って、文字コードをutf8に修正し、いくつか文字コードが変なところはemacsで保存し直して治して、リストア。
本当は、utf8mb4にしたかったけど、なぜかISAMでインデックスの最大長が1000バイトなので、
ERROR 1071 (42000) at line 51: Specified key was too long; max key length is 1000 bytes
というエラーが出る。しかも、いろいろなテーブルで使われているvarchar[255]で簡単に溢れるので、3バイトのutf8で妥協した。
MariaDB [movabletype]> show create database movabletype;
+-------------+----------------------------------------------------------------------+
| Database | Create Database |
+-------------+----------------------------------------------------------------------+
| movabletype | CREATE DATABASE `movabletype` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-------------+----------------------------------------------------------------------+
1 row in set (0.000 sec)
MariaDB [movabletype]> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.002 sec)
で、無事に文字化けが治った。
|