1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQLで0から始まる値をINSERTしても0が表示されない問題を解決する

Last updated at Posted at 2020-04-19

経緯

表題の問題を解決するための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'が表示されてしまう。
スクリーンショット 2020-04-19 12.03.37.png

解決方法

結論、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'が表示される。
スクリーンショット 2020-04-19 12.27.32.png

補足&参考サイト

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'がフィールドの値として入ります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?