サービスを作成する時に,
そこで今回は,
検証環境
今回使用した環境は,
まず最初に,
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)
上記のように警告を出し,