MySQLのvarchar(XX)は、文字数(MySQL4.1.20)
やっぱりね(笑)
ということで実験結果はこんなカンジ。
TABLE `test1` UTF8
mysql> SHOW FIELDS FROM test1; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | name | varchar(32) | | | | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> INSERT INTO test1 SET name = '12345678901234567890123456789012'; Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO test1 SET name = '123456789012345678901234567890123'; Query OK, 1 row affected, 1 warning (0.01 sec) mysql> INSERT INTO test1 SET name = '12345678901234567890123456789012'; Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO test1 SET name = '123456789012345678901234567890123'; Query OK, 1 row affected, 1 warning (0.00 sec) mysql> SELECT * FROM test1; +----+--------------------------------------------------------------------------------------------------+ | id | name | +----+--------------------------------------------------------------------------------------------------+ | 7 | 12345678901234567890123456789012 | | 8 | 12345678901234567890123456789012 | | 9 | 12345678901234567890123456789012 | | 10 | 12345678901234567890123456789012 | +----+--------------------------------------------------------------------------------------------------+ 4 rows in set (0.00 sec)
マルチバイトもASCIIも、32文字だけ入ってます。(それより多い文字を入れようとすると、お尻で切れる。そして、INSERT時にwarningが出ますね。)
私はどちらかというとバイト数で計算するほうが…だって、バイト数のなら、ASCIIでもマルチバイトでも、大きさは絶対でしょう?
とかなんとか考えてたら、じゃあマルチバイトでは表現できる量が減るじゃないかとか、バイトでちょん切ったら最後の文字が化ける可能性があるじゃないかとか色々考えてきた。