MySQLのvarchar(XX)はバイト数(MySQL3.23)
メモね、メモ。
マルチバイトとか扱ってると、「文字数」なのか「バイト数」なのか、言語によって仕様違うしなー。と思って。いつも結構曖昧にしちゃってたからたまにはと思って(笑)、MySQLのvarcharってどっちか調べてみた。
SHOW FIELDS FROM test; +---------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | | PRI | NULL | auto_increment | | name | varchar(63) | | | | | +---------------+------------------+------+-----+---------+----------------+ SELECT * FROM test; +-------------+-----------------------------------------------------------------+ | id | name | +-------------+-----------------------------------------------------------------+ | 4 | 1234567890123456789012345678901 | | 8 | 1234567890123456789012345678901 ・ | 10 | 123456789012345678901234567890123456789012345678901234567890123 | | 11 | 123456789012345678901234567890123456789012345678901234567890123 | +-------------+-----------------------------------------------------------------+
id=4 | マルチバイトで 1〜 31個打ち込んでみた。 |
id=8 | マルチバイトで 1〜 63個打ち込んでみた。 |
id=10 | ASCIIで 1〜 63個打ち込んでみた。 |
id=11 | ASCIIで 1〜 64個打ち込んでみた。 |
まあ結果は見ての通りですが、マルチバイトの場合、31文字(62バイト)しか入りません。それ以降は、きられちゃってます。半分で切られたもんだから文字化け。ASCIIはもう見て明らかですが、63文字入ります。64字目から後ろは切られます。なんか当たり前っちゃ当たり前の結果が・・・。
ちなみにこれは古いサーバで実験したのでMySQL3.23(^^; たしかマルチバイトに関する扱いが4当たりで結構変わったな。MySQL4と5でも調べてみよう。あ、キャラセットでも変わってくるのかな。その辺も調べてみるです。
cf.) 「mysql varchar マルチバイト」on Google
うーん?文字数?
バージョンと文字コードが書いてないので判断しがたいですけどね。
後で調べるべし。