MySQL은 커스텀 데이터 타입을 지원합니까? 예를 들어, 우편 번호는 varchar(10)
필드에 저장 될 수 있지만 int
공백에 대한 옵션과 5 자리 또는 5 + 4 자리 우편 번호인지에 대한 플래그를 사용하여에 압축 될 수 있습니다.
그러한 것들을 위해 완벽한 데이터 유형을 설치하는 방법이 있습니까? 응용 프로그램에 관한 한, 문자열 유형이 될 수 있습니다. 응용 프로그램이 유효하지 않은 데이터를 전달하면 단순히 경고가 있거나없는 데이터 잘림이 발생합니다.
사용자 정의 함수를 사용할 수 있습니다 (예 : INET_ATON
IPv4 주소를위한 내장 함수 가 있습니다. 그러나 zip LIKE '12345%'
적절하게 색인을 생성해야하는 것은 허용하지 않습니다 . 사용자 정의 데이터 유형을 잘 작성하여 지원하면 데이터 유형을 표시 할 수 있습니다 따라서 정렬 zip int
할 때 컴팩트 는 마치 마치 것처럼 정렬됩니다 zip varchar(10)
.
이렇게하면 열의 너비가 고정 될 수 있으며 6 또는 10 바이트의 가변 저장 영역을 고정 된 너비의 4 바이트로 줄일 수 있습니다.
적용 가능한 몇 가지가 있습니다
- 우편 번호
- IPv6 주소
- 최소 수준의 정밀도와 용량
2038
보다 스토리지 사용량이 적은 사용자 정의 타임 스탬프 필드datetime
이지만 구현 연도 이전 날짜를 지원할 필요는 없습니다 (시스템에서 가장 오래된 날짜 인 경우 최소값은 2007 일 수 있음). - (이 DST를 구현하는 타임 스탬프 존재하지 않는 것 )
- 2 바이트 미국 상태는 단일 바이트에 저장 가능
- long
ENUM
은 사용자 정의 데이터 유형으로 분리되어DESCRIBE
출력이 모든 줄 바꿈으로 너무 어려워 보이지는 않습니다.
데이터 유형 핸들러는 함수가 저장되는 방식과 유사하게 저장 될 것으로 예상합니다.
데이터베이스 엔진에 이와 같은 것이 원격으로 있습니까? 나는 주로 MySQL을 사용하지만 응용 프로그램을 함수와 같은 함수로 만드는 것이 부족하여 이것이 구현되었는지 궁금 INET_ATON
합니다.
MS SQL은 그 특성을 가진 것처럼 보이지만 그것이 단순한 동의어 이상인지 알고 싶습니다. (예를 들어 boolean
동의어가 될 수있다 tinyint(1)
, 또는 postal_code
중 하나 char
또는 varchar
(5
또는 9
또는 10)
) 동의어 내가 여기에 대해 요구하고 있지 않습니다 것을.
IPv6
로 binary(16)
, 또는 (에 사용할 수있는이 앨리어싱으로 제한됩니다 state
의가되고 enum
S)
int
것 없는 캐나다, 예를 들어, 'A9A A9A'의 형식을 사용 - 국제화 된 데이터베이스에 대한 작업. 우편 번호에 대한 사용자 정의 데이터 유형을 작성하는 것이 좋습니다. 그러나 일부를 처리 할 계획을 재검토하고 싶을 수도 있습니다 (예 : 1 바이트 필드에 상태를 저장하면 잠재적 인 '기타'문제가 있음). 제공된 데이터 유형이 일반적으로 부족하지 않으면 (크기는 중요하지 않음) 날짜 / 시간 데이터 유형을 다시 구현하지 마십시오. 사람들을 혼란스럽게 할뿐입니다.