[MySQL] 数値を”001″の形で格納

数値を”001″の形で格納する。
“zerofill”を指定する。

参考:
https://www.dbonline.jp/mysql/type/index1.html

mysql> create table test (id smallint(3) zerofill, name varchar(10));

mysql> insert into test values
    -> (1, 'name1'),
    -> (2, 'name2'),
    -> (123, 'name123');

mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|  001 | name1   |
|  002 | name2   |
|  123 | name123 |
+------+---------+

mysql> select * from test where id = 2;
+------+-------+
| id   | name  |
+------+-------+
|  002 | name2 |
+------+-------+

mysql> select * from test where id >= 2;
+------+---------+
| id   | name    |
+------+---------+
|  002 | name2   |
|  123 | name123 |
+------+---------+

mysql> select * from test where id = 002;
+------+-------+
| id   | name  |
+------+-------+
|  002 | name2 |
+------+-------+

insertや、where句の照合は、頭に0をつけてもつけなくてもOKみたい。

ちなみに、

mysql> select id*2,name from test;
+------+---------+
| id*2 | name    |
+------+---------+
|    2 | name1   |
|    4 | name2   |
|  246 | name123 |
+------+---------+

mysql> select id+001,name from test;
+--------+---------+
| id+001 | name    |
+--------+---------+
|      2 | name1   |
|      3 | name2   |
|    124 | name123 |
+--------+---------+

計算すると、zerofillの型じゃなくなるみたいw

もういっちょ、ちなみに、

mysql> insert into test values (1234, 'name1234');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+------+----------+
| id   | name     |
+------+----------+
|  001 | name1    |
|  002 | name2    |
|  123 | name123  |
| 1234 | name1234 |
+------+----------+

型を、smallint(3)にしてても、
4桁の数値は挿入できました。

かなり脱線するけど、ついでに、

mysql> insert into test values (70000, 'name70000');
ERROR 1264 (22003): Out of range value for column 'id' at row 1

さすがに、smallintの範囲を超える数値は、
受け付けません。
あたりまえかw

コメントを残す

メールアドレスが公開されることはありません。