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 값) |