↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] 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)

で、無事に文字化けが治った。

本日のPingbacks(全0件)

Google Web検索 on-o.com内を検索