흐르는 시간의 블로그...

최근 새로운 MariaDB에 데이터를 저장해야할 일이 있다.

DBA가 작성한 쿼리를 보다보니 재밋는 부분들이 보였다. 아래 같은 코드가 눈길을 끌었다.


`XXXX` BIGINT(8)


DataType 문서를 보면 BIGINT면 64bit 숫자를 나타내는 것으로 보인다.


Numeric Data Types - Document for MariaDB

위의 필드가 8자리로 한정되면 차지하는 자릿수는 8byte 일까 4byte일까?

서버팀의 다른 직원과 삼십분 가량 이것저것 뒤져보니 생각보다 황당한 답이 나왔다.


내가 이해한 바로는 일단 8byte를 사용할 것이며 뒤에 붙은 "(8)"은 의미가 없다.


관련한 내용 MySQL 5.5의 문서에서 찾을 수 있었다.


11.1.1 Numeric Type Overview

관련 부분을 발췌하면 다음과 같다.

M indicates the maximum display width for integer types. The maximum display width is 255. Display width is unrelated to the range of values a type can contain, as described inSection 11.2, “Numeric Types”. For floating-point and fixed-point types, M is the total number of digits that can be stored.


maximum display width를 나타내는 것이며 그것은 255까지 될 수 있다. 저장하는 값의 범위와 관련이 없다는 것이다.


좀 더 찾아 다음과 같은 문서를 검색하였다. MySQL 5.7의 Reference Document이다.

12.2.5 Numeric Type Attributes

MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4)specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.)


The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.


실제로 범위를 넘는 숫자에 대해서 표현하는 것도 제한하지 않으며 저장하는 것도 막지 않는다는 것이다.

도대체 왜 저 기능을 넣어놨을까 궁금해지는 순간이었다.


그래서 아래와 같은 결론을 내고 실행하였다.

필요한 필드의 최대값에 맞는 숫자타입을 기본 숫자타입에서 찾아서 지정하고 maximum display width는 지정하지 않는다.


누군가에게 도움이 되길 빌며 내용을 정리해본다.

...