search:

MySQL CHAR(13) v.s. BIGINT(13)

05 Mar 2014

안내

본 문서는 블로그의 운영자인 본인이 Stackoverflow에 올린 답변을 정리한 글입니다.

Stackoverflow URL

http://stackoverflow.com/questions/19919840/mysql-char-13-or-bigint13-when-considering-performance/19919904#19919904

질문

CHAR(13)과 BIGINT(13) 중 어느 것이 속도가 더 빠른가?

답변

아래 예와 같이 BIGINT(1) 으로 선언된 변수에서도 1자리보다 큰 숫자를 저장할 수 있다.

mysql> CREATE TABLE test (col1 BIGINT(1));
Query OK, 0 rows affected (0.02 sec)
 
mysql> INSERT INTO test VALUES(123456789);
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT * FROM test;
+-----------+
| col1      |
+-----------+
| 123456789 |
+-----------+
1 row in set (0.00 sec)

그렇다면 BIGINT(n)에서 n는 어떤 용도로 사용될까? ZEROFILL이라는 거의 사용되지 않는 기능에서 활용된다. 테이블 생성 시 컬럼에 ZEROFILL 옵션을 주는 경우 n보다 적은 자리의 숫자인 경우 앞에 0을 붙여서 모든 숫자들이 동일한 n개의 자리 수를 갖도록 한다. 아래 예를 보자.

ZEROFILL을 사용하지 않는 예

mysql> CREATE TABLE test (col1 BIGINT(10));
Query OK, 0 rows affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (1), (12), (12345), (123456789), (1234567890);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM test;
+------------+
| col1       |
+------------+
|          1 |
|         12 |
|      12345 |
|  123456789 |
| 1234567890 |
+------------+
5 rows in set (0.00 sec)

ZEROFILL 옵션을 사용하는 예

mysql> CREATE TABLE test (col1 BIGINT(10) ZEROFILL);
Query OK, 0 rows affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (1), (12), (12345), (123456789), (1234567890);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM test;
+------------+
| col1       |
+------------+
| 0000000001 |
| 0000000012 |
| 0000012345 |
| 0123456789 |
| 1234567890 |
+------------+

5 rows in set (0.00 sec)

참고로 필자는 MySQL을 15년간 사용했지만 실무에서 ZEROFILL을 사용해 본적은 한번도 없었다.

“MySQL” 카테고리의 추천 글