• ベストアンサー

SJISのCHAR(8)に入れられる文字数について

SJISのCHAR(8)に入れられる文字数について MySQLのver 5.0にて、文字コードをSJISにして、カラムをCHAR(8)で設定した場合、 英数字1バイト文字の場合、16文字まで入れられるのでしょうか? それとも、単純に文字数で弾かれるのでしょうか? 現在、ver 4.0.24(文字コードは全部Cでいうところのchar1バイトで扱う)から、ver 5.0台に移行を考えており、移行するとした場合、PHPなどのプログラムをどの程度変更しなければならないかを考えています。 たとえば、CHAR(8)のカラムへデータを入れる場合、PHPで if( strlen($hoge) <= 16 ){ $hogeをCHAR(8)のカラムへINSERT処理 } とすると、$hogeが英数字だった場合、16文字まで、INSERT文にかかってしまうのですが、これで問題なく16字までINSERT出来るのかどうか知りたいのです。 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>英数字1バイト文字の場合、16文字まで入れられるのでしょうか? MySQL4.1以降char(n)は文字数となっていたはずです。 逆に英数であっても文字数にはかわりないので16文字ではなく8文字です。 strlenは文字数をカウントすることはできないためNGだと思います。 なおSJISの場合は5C問題などあるので所定の文字数がいれられない可能性もあります そうでなくてもインジェクションの罠にはまりがちなのでSJISは排除していく方が いいとおもいますよ

pokapoka1980
質問者

お礼

ありがとうございました。 SQLインジェクションとSJIS(文字コード)は余り関係ない気がしますが、まあ良いです。。。

関連するQ&A