NULL
을 피합니다 : NULL
가능 열은 최적화하기 어려움TINYINT
(8비트), SMALLINT
(16비트), MEDIUMINT
(24비트), INT
(32비트), BIGINT
(64비트) 등의 정수 유형 중 하나를 선택UNSIGNED
속성을 가질 수 있음. 음수 값을 허용하지 않되 양수 값의 상한선을 약 두 배로 만듦INT(11)
와 같이 정수 유형의 ‘너비’를 지정하는 것은, 명시적으로 값 범위를 제한하는 것이 아니라 MySQL의 대화형 도구가 표시 목적으로 예약하는 문자 수를 지정하는 것DECIMAL
을 사용하여 너무 큰 정수를 저장하는 데 사용할 수 있음DECIMAL
보다 적은 공간을 사용함FLOAT
열은 4바이트, DOUBLE
은 8바이트를 소비하며 MySQL은 부동소수점 유형에 대한 내부 계산에 DOUBLE
을 사용함DECIMAL
을 사용 (다만 일부 경우에는 BIGINT를 대신 사용하고 최소 통화량의 배수로 데이터를 저장하는 것이 바람직하기도 함)MySQL은 각각 다양한 종류의 꽤 많은 문자열 데이터 유형을 지원하며, 각 문자열 열에는 고유한 문자 집합과 문자 집합에 대한 정렬 규칙 집합 또는 데이터 정렬이 있을 수 있음
VARCHAR
와 CHAR
유형
VARBINARY
와 BINARY
유형은 문자 대신 바이트를 저장한다는 점을 제외하고 매우 유사함
VARHCAR |
CHAR |
|
---|---|---|
차이점 | 가변 길이 문자열 | |
(고정 길이 유형보다 저장공간이 덜 필요할 수 있음 | 고정 길이 문자열 | |
(지정된 문자 수에 충분한 공간을 할당) | ||
특징 | 1 또는 2 바이트의 추가 바이트를 사용하여 값의 길이를 기록 (열 최대 길이가 255바이트 이상/이하인지) | MySQL은 CHAR 값을 저장할 때 후행 공백을 제거함. 필요 시 값의 비교를 위해 공백으로 채워짐 |
Use Case | 최대 열 길이가 평균 길이보다 훨씬 긴 경우 | |
필드에 대한 업데이트가 드물어서 조각화가 문제되지 않는 경우 | ||
UTF-8과 같은 복잡한 문자셋을 사용할 경우 | 매우 짧은 문자열을 저장하려는 경우 | |
모든 값의 길이가 거의 동일한 경우 | ||
(ex. 사용자 암호의 MD5 값) |