サービスを作成する時に,
そこで今回は,
検証環境
今回使用した環境は,
まず最初に,
mysql> CREATE DATABASE characters; Query OK, 1 row affected (0.00 sec) mysql> use characters Database changed
また,
CHAR型
CHAR型の特徴的な点は,
mysql> CREATE TABLE ch(c CHAR(4)) CHARACTER SET latin1; Query OK, 0 rows affected (0.03 sec)
また,
mysql> INSERT INTO ch(c) VALUES ('a b '); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO ch(c) VALUES ('a b'); Query OK, 1 row affected (0.01 sec)
続けて,
mysql> SELECT CONCAT('(',c,')') FROM ch; +-------------------+ | CONCAT('(',c,')') | +-------------------+ | (a b) | | (a b) | +-------------------+ 2 rows in set (0.00 sec)
上記の結果から,
CHAR型で指定できる長さ
CHAR型では,
mysql> CREATE TABLE ch2(c CHAR(0)) CHARACTER SET latin1; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE ch3(c CHAR(255)) CHARACTER SET latin1; Query OK, 0 rows affected (0.01 sec)
上のように,
mysql> CREATE TABLE ch4(c CHAR(256)) CHARACTER SET latin1; ERROR 1074 (42000): Column length too big for column 'c' (max = 255); use BLOB or TEXT instead
この型を使う際は,
SQLモードの違い
今回の説明では,
原因は,
5.
5.STRICT_
やSTRICT_
をSQLモードに指定することで,
mysql> INSERT INTO ch(c) VALUES ('abcde'); ERROR 1406 (22001): Data too long for column 'c' at row 1
参考までに,
mysql> INSERT INTO ch(c) VALUES ('abcde'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> select c from ch; +------+ | c | +------+ | abcd | +------+ 1 row in set (0.00 sec)
上記のように警告を出し,