MySQL闇歴史2 書き戻せないmysqldump

これは MySQL闇歴史 Advent Calendar 2022 の2枚目のカレンダー6日目のエントリーです。


昔、mysqldumpでダンプしたデータをリストアできないことがあった、と言ったら、あなたは信じるだろうか。


知名度:★★★☆☆
闇度 :★★★☆☆
個人的な思い出度:★★★★★


 MySQL 4.0 の時代、mysqldumpでダンプしたデータをリストアする際に、確実に失敗する事象があった。テーブルにとあるデータ型を使っていた場合だ。なんの型か、想像がつくだろうか。

 そう。BLOBだ。MySQL 4.0.22 まで、なんとmysqldumpは、BLOBカラムの内容をそのままバイナリで吐き出していたのだ。ダンプされたファイルをテキストエディタで覗いてみると、まるで滅茶苦茶である。これでは書き戻しができるわけがない。
 そこで、BLOBカラムの場合は HEX文字列化してダンプする提案をし、中の人に実装してもらった。書き戻しも正常に行えるようになって快適になったこの修正(--hex-blob オプション)は、2004年12月のMySQL 4.0.23 および 4.1.8 にて公開された。
 

MySQL 4.0 Release Note より


 その直後、モンティ氏によって、BLOB型だけでなくBINARY属性のついた文字列カラムにまで適用範囲を広げられてしまった。当時我々日本人は、文字化けを防ぐためだったか期待せぬマッチをされぬためだったか、VARCHAR()列には BINARY 属性をつけることが常識となっていたと記憶している。普通に文字列のままダンプしてくれて何も問題がなかったところ、そのあたりすべてが HEX表記でのダンプとなってしまい、ダンプ結果が目視しにくくなってしまった。「おもてたんとちがう」というオチがついてしまった格好だ。