반응형
메모만 해두고 블로그에 적는 것을 까먹고 있었던 내용을 간만에 적어본다.
혹시 테이블 생성할 때, INT 에 괄호치고 값을 넣어 본 기억이 있는가?
아니면, 왜 이거 INT(8)이야? 하면서 테이블 생성자에게 화를 내본적이 있는가?
그렇다면....... 당신은 바보~ -0-/
헉...!!! ..... 내가 말을 잘 못했소... 돌던지지 말아주시오~~
(*,.ㅜ);;
자... 간단히 테스트를 해보자.
<< 예제 >>
##################################################################################################
# 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_test VALUES(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);
NUMBER_2 NUMBER_5 |
참고가 되셨으면 합니다. ^^
출처 : http://blackbull.tistory.com/44
반응형
'Database' 카테고리의 다른 글
[MySQL] 데이터베이스, 테이블 활용 예제 (0) | 2011.06.05 |
---|---|
[MySQL] MySQL 명령어 (0) | 2011.06.05 |
[MySQL] MySQL의 Lib 사용법 (0) | 2011.06.05 |
[MySQL] MySQL lib를 리눅스 C에서 사용하기 (0) | 2011.06.03 |
[MySQL] NetBeans와 MySQL 연동 설정 (3) | 2010.12.15 |