Чи підтримує 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 (які , здається, не існують )
- Двома літерами штат США можна зберігати в одному байті
- long
ENUM
s можна розділити на користувальницький тип даних, щобDESCRIBE
вихідний результат не був таким безладно виглядає з усією обгорткою.
Я очікую, що обробники типів даних зберігатимуться аналогічно тому, як зберігаються функції.
Чи є щось подібне віддалено на будь-якому двигуні бази даних? Я в основному використовую MySQL, але мені цікаво, якщо це колись було здійснено, окрім того, щоб зробити виклик програми такою функцією, як INET_ATON
функція.
MS SQL, здається, має щось подібне , але я хотів би знати, чи це більше, ніж просто синонім. (Наприклад , boolean
може бути синонімом tinyint(1)
, або postal_code
для одного з char
чи varchar
(5
або 9
чи 10)
) Синоніми не те , що я питаю тут.
IPv6
в binary(16)
, або вона обмежена ступенчатости (які можуть бути використані для state
s стати enum
їй)
int
заповіту не працюватиме для інтернаціоналізованої бази даних - наприклад, Канада використовує формат "A9A A9A". Створення власного типу даних для поштових індексів, мабуть, є хорошою ідеєю; однак, можливо, ви захочете переглядати, як ви плануєте займатися деякими з них (наприклад, зберігання стану в однобайтовому полі має потенційні "інші" проблеми). І не використовуйте повторно типи даних про дату / час, якщо тільки надані не мають дефіциту (розмір не враховується) - ви просто заплутаєте людей.