Unterstützt MySQL benutzerdefinierte Datentypen? Zum Beispiel können Postleitzahlen in einem varchar(10)Feld gespeichert werden, sie können jedoch in ein Feld intmit 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_ATONfü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 intbeim 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
2038weniger 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
ENUMs kann in einen benutzerdefinierten Datentyp unterteilt werden, sodass dieDESCRIBEAusgabe 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_ATONFunktion 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 booleanein Synonym für tinyint(1)oder postal_codefür eines von charoder varchar (5oder 9oder sein 10)) Synonyme sind nicht das, wonach ich hier frage.
IPv6in ein binary(16), oder ist es auf Aliasing beschränkt (das für states wird enums verwendet werden könnte)
intwird 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.