Unterstützt MySQL benutzerdefinierte Datentypen? Zum Beispiel können Postleitzahlen in einem varchar(10)
Feld gespeichert werden, sie können jedoch in ein Feld int
mit Optionen für Leerzeichen und einer Markierung, ob es sich um eine 5-stellige oder eine 5 + 4-stellige Postleitzahl handelt, komprimiert werden.
Gibt es eine Möglichkeit, nahtlose Datentypen für solche Dinge zu installieren? Was die Anwendung betrifft, handelt es sich um einen Zeichenfolgentyp, und es wird einfach (mit oder ohne Warnung) abgeschnitten, wenn die Anwendung ungültige Daten übergibt.
Benutzerdefinierte Funktionen könnten verwendet werden (zum Beispiel gibt es eine integrierte Funktion INET_ATON
für IPv4-Adressen. Dies ermöglicht jedoch nicht, dass Dinge zip LIKE '12345%'
ordnungsgemäß indiziert werden. Eine gut geschriebene Unterstützung für benutzerdefinierte Datentypen würde das Markieren eines Datentyps ermöglichen so sortierbar, dass der Compact zip int
beim Sortieren so aussortiert, als wäre er ein zip varchar(10)
.
Dies würde ermöglichen, dass die Spalte eine feste Breite hat, und dass der variable Speicher von 6 oder 10 Byte auf 4 Byes fester Breite reduziert werden kann.
Es gibt mehrere anwendbare Verwendungen
- Postleitzahlen
- IPv6-Adressen
- Benutzerdefinierte Zeitstempelfelder mit einer Genauigkeit und Kapazität auf Minutenebene, die darüber hinaus
2038
weniger Speicherplatz beanspruchen alsdatetime
, aber keine Unterstützung für Daten vor dem Implementierungsjahr erforderlich sind (z. B. 2007, wenn dies die ältesten Daten im System sind). - Zeitstempel, die die Sommerzeit implementieren (die scheinbar nicht vorhanden sind )
- Der US-Bundesstaat mit zwei Buchstaben kann in einem einzelnen Byte gespeichert werden
- long
ENUM
s kann in einen benutzerdefinierten Datentyp unterteilt werden, sodass dieDESCRIBE
Ausgabe bei all den Zeilenumbrüchen nicht so chaotisch aussieht.
Ich gehe davon aus, dass die Datentyp-Handler ähnlich wie die Funktionen gespeichert werden.
Gibt es so etwas in einer Datenbank-Engine? Ich benutze meistens MySQL, aber ich bin neugierig, ob dies jemals implementiert wurde, ohne dass die Anwendung eine Funktion wie die INET_ATON
Funktion aufruft.
MS SQL scheint so etwas zu haben , aber ich würde gerne wissen, ob es mehr als nur ein Synonym ist. (könnte zum Beispiel boolean
ein Synonym für tinyint(1)
oder postal_code
für eines von char
oder varchar
(5
oder 9
oder sein 10)
) Synonyme sind nicht das, wonach ich hier frage.
IPv6
in ein binary(16)
, oder ist es auf Aliasing beschränkt (das für state
s wird enum
s verwendet werden könnte)
int
wird nicht Arbeit für eine internationalisierte Datenbank - Kanada, zum Beispiel das Format von ‚A9A A9A‘ verwendet. Es ist wahrscheinlich eine gute Idee, einen benutzerdefinierten Datentyp für Postleitzahlen zu erstellen. Möglicherweise möchten Sie jedoch noch einmal überprüfen, wie Sie mit einigen von ihnen umgehen möchten (das Speichern des Status in einem Einzelbyte-Feld hat beispielsweise potenzielle "andere" Probleme). Und implementieren Sie Datums- / Zeitdatentypen nicht erneut, es sei denn, die angegebenen Datentypen weisen einen nicht verwendbaren Mangel auf (Größe zählt nicht) - Sie verwirren nur die Menschen.