MySQL에서 0부터 시작하는 값을 INSERT해도 0이 표시되지 않는 문제 해결

경위



제목 문제를 해결하기 위한 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'이 표시됩니다.


보충 및 참고 사이트



htps : // m / thun yG / ms / a 0097 a 83b2 a 879b22 a b9
ZEROFILL 속성을 넣을 때 UNSIGNED 속성을 넣지 않은 이유도 작성되었습니다.

ht tp // d 병. 사쿠라. 네. jp/? 콘텐트 ts_i d=102
mysql에서 열을 정의 할 때 int ()의 괄호 안의 숫자의 의미를 알 수 있습니다.
이번과 같이 ZEROFILL을 붙였을 때, 0을 보완하는 자리수로서 괄호 안의 수치가 의미를 가지네요.

예를 들어 이번에는 id 컬럼을 int(3)로 하고 있으므로, 1을 삽입했을 때에 '001'이 필드의 값으로서 들어갑니다. 만약 이것이 int(5)이고, 1을 삽입했을 경우는 '00001'이 필드의 값으로서 들어갑니다.

좋은 웹페이지 즐겨찾기