こんにちは、id:EC-OneのAkiです。 前回のエントリに引き続き、MySQLの小ネタをひとつ。 MySQLに不正な値を入れると...? Oracle+Windows-31Jで構築したアプリをMySQL+UTF-8に変更していたエンジニアが気付いたこと。 Oracleは不正な値をINSERTやUPDATEで入れようとするとエラーになります。 不正な値とは、たとえば「カラムサイズを超える長さの文字列」等です。 日本語の文字列の必要バイト数は文字コードがWindows-31Jであれば「1文字2バイト」で計算できます。 しかし、UTF-8にするとそれよりも必要バイト数が多くなります。これはUTF-8が日本語一文字に2〜4バイト使用するためです。 ところが、MySQLに明らかにカラムサイズを超える文字列を入れてもエラーになりません。 おかしいなと思ってデータを見てみると、そのデータの文章が不自