MySQL prend-il en charge les types de données personnalisés? Par exemple, les codes postaux peuvent être stockés dans un varchar(10)champ, mais ils peuvent être compactés dans un int, avec des options pour les blancs, et un indicateur indiquant s'il s'agit d'un code postal à 5 chiffres ou 5 + 4 chiffres.
Existe-t-il un moyen d'installer des types de données transparents pour de telles choses? En ce qui concerne l'application, ce serait un type chaîne, il y aurait simplement une troncature des données (avec ou sans avertissement), si l'application transmettait des données invalides.
Des fonctions personnalisées peuvent être utilisées (par exemple, il existe une fonction intégrée INET_ATONpour les adresses IPv4. Mais cela ne permet pas de telles choses zip LIKE '12345%'qui devraient être correctement indexées. Un support bien écrit pour les types de données personnalisés permettrait de marquer un type de données comme triable. Ainsi, le compact zip int, une fois trié, serait trié comme s'il s'agissait d'un zip varchar(10).
Cela permettrait à la colonne d'avoir une largeur fixe, cela permettrait de réduire le stockage variable de 6 ou 10 octets à 4 octets de largeur fixe.
Il existe plusieurs utilisations applicables
- Codes ZIP
- Adresses IPv6
- Champs d'horodatage personnalisés avec précision de niveau minute et capacité au-delà
2038avec moins d'utilisation de stockage quedatetime, mais pas besoin de prendre en charge les dates avant l'année de mise en œuvre (par exemple, le min pourrait être 2007 s'il s'agit des dates les plus anciennes du système) - Horodatages qui implémentent DST (qui ne semblent pas exister )
- L'état américain à deux lettres peut être stocké dans un seul octet
- les
ENUMs longs peuvent être séparés en un type de données personnalisé afin queDESCRIBEla sortie ne soit pas aussi compliquée à regarder avec tout le wrapping.
Je m'attends à ce que les gestionnaires de types de données soient stockés de la même manière que les fonctions sont stockées.
Existe-t-il quelque chose de semblable à distance sur un moteur de base de données? J'utilise principalement MySQL, mais je suis curieux de savoir si cela a déjà été implémenté, à moins de faire en sorte que l'application appelle une fonction comme la INET_ATONfonction.
MS SQL semble avoir quelque chose de cette nature , mais j'aimerais savoir si c'est plus qu'un simple synonyme. (par exemple booleanpourrait être un synonyme de tinyint(1), ou postal_codepour l'un charou varchar (5ou 9ou ou 10)) Les synonymes ne sont pas ce que je demande ici.
IPv6en un binary(16), ou est-elle limitée à l'aliasing (qui pourrait être utilisé pour que states devienne enums)
intfichier ne fonctionnera pas pour une base de données internationalisée - le Canada, par exemple, utilise le format «A9A A9A». La création d'un type de données personnalisé pour les codes postaux est probablement une bonne idée; cependant, vous souhaiterez peut-être réexaminer la façon dont vous envisagez de traiter certains d'entre eux (le stockage de l'état dans un champ à un octet présente par exemple d'autres problèmes potentiels). Et ne réimplémentez pas les types de données date / heure, à moins que ceux fournis ne soient inutilisables (la taille ne compte pas) - vous confondrez simplement les gens.