Czy MySQL obsługuje jakieś niestandardowe typy danych? Na przykład, kody pocztowe mogą być przechowywane w varchar(10)polu, ale mogą być spakowane do int, z opcjami pustymi i flagą wskazującą, czy jest to 5-cyfrowy, czy 5 + 4-cyfrowy kod pocztowy.
Czy istnieje sposób instalowania płynnych typów danych dla takich rzeczy? Jeśli chodzi o aplikację, byłby to ciąg znaków, byłoby po prostu obcinanie danych (z ostrzeżeniem lub bez), gdyby aplikacja przekazała nieprawidłowe dane.
Można użyć funkcji niestandardowych (na przykład istnieje wbudowana funkcja INET_ATONdla adresów IPv4. Ale to nie pozwala na takie rzeczy, zip LIKE '12345%'które powinny być odpowiednio indeksowane. Dobrze napisana obsługa niestandardowych typów danych pozwoliłaby na oznaczenie typu danych jak sortable. Więc kompaktowy zip int, gdy sortowane, będzie porządek, tak jakby to było zip varchar(10).
Pozwoliłoby to na ustalenie szerokości kolumny, pozwoliłoby na zmniejszenie pojemności pamięci 6 lub 10 bajtów do 4 bajtów o stałej szerokości.
Istnieje kilka odpowiednich zastosowań
- Kody pocztowe
- Adresy IPv6
- Niestandardowe pola znaczników czasu z dokładnością na poziomie minuty i pojemnością przekraczającą
2038przy mniejszym zużyciu pamięci niżdatetime, ale bez potrzeby obsługi dat przed rokiem wdrożenia (powiedzmy, że min może być 2007, jeśli są to najstarsze daty w systemie) - Znaczniki czasu, które implementują czas letni ( wydaje się, że nie istnieje )
- Dwuliterowy stan USA może być przechowywany w jednym bajcie
- długie
ENUMs można podzielić na niestandardowy typ danych, dzięki czemuDESCRIBEdane wyjściowe nie byłyby tak niechlujne z całym opakowaniem.
Oczekuję, że procedury obsługi typów danych będą przechowywane podobnie do sposobu przechowywania funkcji.
Czy jest coś takiego zdalnie w dowolnym silniku bazy danych? Najczęściej używam MySQL, ale jestem ciekawy, czy to kiedykolwiek zostało zaimplementowane, poza tym, że wywołanie tej aplikacji było funkcją taką jak INET_ATONfunkcja.
MS SQL wydaje się mieć coś takiego , ale chciałbym wiedzieć, czy to coś więcej niż tylko synonim. (na przykład booleanmoże być synonimem tinyint(1), lub postal_codejednym z charlub varchar (5lub 9lub 10)) Synonimy nie są tym, o co tutaj pytam.
IPv6w binary(16), czy jest to ograniczone do aliasing (które mogą być wykorzystane do states stając enumów)
int będzie działać w przypadku internacjonalizowanej bazy danych - na przykład Kanada używa formatu „A9A A9A”. Stworzenie niestandardowego typu danych dla kodów pocztowych jest prawdopodobnie dobrym pomysłem; możesz jednak chcieć ponownie zbadać, w jaki sposób planujesz poradzić sobie z niektórymi z nich (na przykład przechowywanie stanu w polu jednobajtowym może potencjalnie powodować „inne” problemy). I nie należy ponownie wdrażać typów danych daty / godziny, chyba że podane są zwykle zwykle niewystarczające (rozmiar się nie liczy) - po prostu pomylisz ludzi.