経緯
表題の問題を解決するためのSQLをメモとして投稿解決したい事象
IDカラムに0から始まる値をINSERTしても0が表示されない場合のSQL例。/* 新しいDBとしてmydbを定義、使用宣言をする */
create database mydb;
use mydb;
/* sampleテーブルを作成 */
create table mydb.sample(id int(3) UNSIGNED PRIMARY KEY,
name varchar(10) not null, sex char(1) not null);
/* 値をINSERTする */
insert into sample
values ('001', "田中太郎", "男");
/* 中身を表示する */
select * from sample;
結果、idカラムにはINSERTした'001'ではなく、'1'が表示されてしまう。
解決方法
結論、INSERT文ではなくTABLE作成時の定義に問題がある。 解決するにはid列を定義するとき、ZEROFILLを指定する必要があった。実際にZEROFILLを指定してINSERTし直してみる。
/* sampleテーブルを一度削除しておく */
drop table sample;
/* idに ZEROFILL を指定したsampleテーブルを作成 */
create table mydb.sample(id int(3) ZEROFILL PRIMARY KEY,
name varchar(10) not null, sex char(1) not null);
/* 値をINSERTする */
insert into sample
values ('1', "田中太郎", "男");
/* 中身を表示する */
select * from sample;
カラム定義時にZEROFILLを指定しておくと、データINSERT時に上の桁を0で埋めて文字列長さを固定してくれるため、値をinsertする際には上の桁の0を入力する必要がない。
idカラムには指定した通りの'001'が表示される。
補足&参考サイト
https://qiita.com/sunnyG/items/a0097a83b2a879b22ab9 ZEROFILL属性を入れたときにUNSIGNED属性を入れていない理由も書かれています。http://dbinfo.sakura.ne.jp/?contents_id=102
mysqlでカラムを定義するときのint()のカッコ内の数値の意味がわかります。
今回のようにZEROFILLを付けたとき、0を補完する桁数としてカッコ内の数値が意味を持つんですね。
例えば今回はidカラムをint(3)としているので、1を挿入したときに'001'がフィールドの値として入ります。もしこれがint(5)で、1を挿入した場合は'00001'がフィールドの値として入ります。