Laravelで業務システム

Laravel関連の記事掲載してます

文字コードの失敗談

最近は言語もDBも当たり前のように使っている文字コードのUTFですが、UTFにまつわる失敗談をしたいと思います。

PHPをやり始めたころはWindowsで開発している分には日本語の文字コードSJIS当たり前という感じでしたので、PHPやDBも深く考えずSJISベースで始めました。

ここが悲劇の始まりです。

暫くは問題なかったのですが、日本語がDBにインサートできないという問題がありました。なんでかなーと思ってたらSJISエスケープ文字(2バイト目に"\"コードが入る文字)があり、たまたまその文字が一番後ろに来ていて、シングルクォーテーションをエスケープしてしまっていたのです。

問題はこれだけでなく、使っていたDBのPostgresqlSJIS非対応であることがわかりました。正確には標準のASCIIにしておけば無視されるのでインサートできるが、SQLでの検索がうまくいかない等問題もあったし、何より、データのインポートとかが、うまくいかないこともざらにありました。

PHPについては、この当時のPHPではマジッククオートという、"\"に自動的に"\"を加えてエスケープしてくれるという機能があったので仕方なくこいつを使ってました。しかし、途中で非推奨となり取り除かれ、PHPバージョンアップに伴うシステム改修にえらく苦労しました。

当時は、PHPでの開発に関する情報がインターネットにあまり出回ってなかったため、本買って勉強してることが多かったのですが、このころのPHPの本はいい加減で、文字コードにいたってはSJISがよいと平気で書かれていたりしました。

この背景には、UTFはいろんな言語を扱える分、データ容量が大きくなるからあんまりよろしくない等のあいまいな情報とかも出回っていたからなのかもしれません。おとなしくUTF使っておけばよかったと後悔してます。

まだこのころはハードディスクも今のような大容量でもなかったので、余計に上のような情報に惑わされた感があり、UTFから遠のいてしまったという感じです。

昔は、CPU,MEM,HDも今のような大きいものでなく、いかに効率よく使うかに労力を割くことが多かったです。もちろん大事な考えですが、昨今では、ハードスペックが上がっただけでなく、フレームワークも充実してますし仮想化技術も進み、こういったことを意識しなくて済むいい時代になったなーと思います。