흠… 착각에 빠질수 있는 위험이 있군;; 결국 제로필을 몇자리로 할건지;;
<< 예제 >>
##################################################################################################
# 1. 테스트 테이블 생성
CREATE TABLE int_test (
int_1 INT(1),
int_1_z INT(1) ZEROFILL,
int_5 INT(5),
int_5_z INT(5) ZEROFILL,
int_9 INT(9),
int_9_z INT(9) ZEROFILL,
int_11 INT(11),
int_11_z INT(11) ZEROFILL
)ENGINE=INNODB DEFAULT CHAR SET =UTF8;
# —————————————————————————
# 2. 테스트 값 넣어보기
INSERT INTO int_test VALUES(1,1,1,1,1,1,1,1);
INSERT INTO int_test VALUES(12345,12345,12345,12345,12345,12345,12345,12345);
INSERT INTO int_testVALUES(1234567890,1234567890,1234567890,1234567890,1234567890,1234567890,1234567890,1234567890);
##################################################################################################
당신의 평소 생각대로라면,
# ——————————
SELECT *
FROM int_test;
# ——————————
의 결과는?
<< 수행 결과 >>
| mysql> SELECT * FROM int_test; +————+————+————+————+————+————+————+————-+ | int_1 | int_1_z | int_5 | int_5_z | int_9 | int_9_z | int_11 | int_11_z | +————+————+————+————+————+————+————+————-+ | 1 | 1 | 1 | 00001 | 1 | 000000001 | 1 | 00000000001 | | 12345 | 12345 | 12345 | 12345 | 12345 | 000012345 | 12345 | 00000012345 | | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 01234567890 | +————+————+————+————+————+————+————+————-+ 3 rows in set (0.00 sec) |
얼래? 이거… 당신이 예상하던 값과는 다르지 아니한가?
분명히 INT(n)하면 n개만 입력될 것이라 생각했었는데,
값이 몽땅 들어가버리네???
http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
를 보면, 이에 대한 명확한 설명이 있다..
짧은 잉글리쉬 실력으로 요약해 보자면,
INT의 괄호는 보여지는 숫자의 개수의 제약을 의미하는 것이 아니다.
아무리 INT 옆에 괄호치고 숫자를 넣어봐라, 들어갈 수 있는 한계는 언제나 같을 껄? ㅋㅋㅋ (의역 -0-;;)
INT의 괄호 옵션은 ZEROFILL을 위한 거다.
만약 괄호 안에 5를 집어넣었다면(INT(5)), 5자리 내의 숫자는 0으로 채워지게 된다.
쏼라쏼라….
개뿔.. 이넘의 짧은 영어… 영어 때문에 속이 울렁거린당 (-ㅠ-);;
요약하자면,
INT의 괄호 옵션 기능은 ZEROFILL에서 0이 채워지게 되는 개수이고,
실제 저장공간 및 입력 가능 한계는 동일하다는 의미이다.
위 실행결과에서도 볼 수 있듯이,
INT(1), INT(5), INT(9), INT(11)에 들어가는 값은 동일하며,
INT(1) ZEROFILL, INT(5) ZEROFILL, INT(9) ZEROFILL, INT(11) ZEROFILL 에서만,
0이 들어가는 개수에 차이가 있음을 볼 수 있다.
그나마 ZEROFILL의 한계를 넘어버리면, 그 때부턴 구분도 안 간다 -0-;;;;;
자, 정리하자!!
앞으로 INT(n) 에서 n이 자기 맘대로 들어가 있다고 애꿎은 사람 잡지말고,
‘풋! ZEROFILL을 위한 공간이군! 쯧쯧쯧…’
하면서 아는체 해주는 쎈쓰를 보여라!!!
그럼, 당신은 위대한 인물로 추앙받고 존경받으리~~~ ……… 는 아니겠징 -0-;;;;
이상!
[2009-01-09] 덧글에 대한 설명을 위해 아래와 같이 추가합니다 ^0^/
결론부터 말씀드리자면, 오라클에서는 실제 자리수를 표현하는데 사용됩니다. ^^
아래 예제를 볼까요?
<< 예제 >>
##################################################################################################
# 1. 테스트 테이블 생성
CREATE TABLE number_test (
NUMBER_2 NUMBER(2),
NUMBER_5 NUMBER(5)
);
# —————————————————————————
# 2. 테스트 값 넣어보기
INSERT INTO number_test VALUES(12,12);
INSERT INTO number_test VALUES(12345,12345);
##################################################################################################
의 결과는?
<< 수행 결과 >>
| SQL> INSERT INTO number_test VALUES(12,12);1 개의 행이 만들어졌습니다.SQL> INSERT INTO number_test VALUES(12345,12345); INSERT INTO number_test VALUES(12345,12345) * 1행에 오류: ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다. SQL> SELECT * FROM number_test; NUMBER_2 NUMBER_5 |
참고가 되셨으면 합니다. ^^

11 Replies to “[MySQL] INT(11) 에서의 (11)의 의미를 아세요?”