肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

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

うーん?文字数?
バージョンと文字コードが書いてないので判断しがたいですけどね。


後で調べるべし。