MySQL是否支持自定义数据类型?例如,邮政编码可以存储在一个varchar(10)
字段中,但可以压缩为一个int
,其中带有空白选项,并带有一个有关5位或5 + 4位邮政编码的标志。
有没有办法为这些事情安装无缝数据类型?就应用程序而言,它将是字符串类型,如果应用程序传递了无效数据,则将只是数据截断(带有或不带有警告)。
可以使用自定义函数(例如,有一个INET_ATON
用于IPv4地址的内置函数。但这不允许zip LIKE '12345%'
进行正确索引的事情。对自定义数据类型的良好书写支持将允许标记数据类型因此,紧凑型zip int
在排序时会像是一样进行排序zip varchar(10)
。
这将允许该列为固定宽度,这将允许将6或10字节的变量存储空间缩减为4 byby固定宽度。
有几种适用的用途
- 邮递区号
- IPv6地址
- 自定义时间戳字段,具有分钟级别的精度和容量
2038
,且存储使用量少于datetime
,但无需支持实施年份之前的日期(例如,如果这些日期是系统中最早的日期,则最小值可以是2007年) - 实现DST的时间戳(似乎不存在)
- 两个字母的美国状态可以存储在一个字节中
ENUM
可以将long s分隔为自定义数据类型,这样,DESCRIBE
在所有包装中,输出都不会显得那么混乱。
我希望数据类型处理程序的存储方式类似于函数的存储方式。
任何数据库引擎上是否都存在类似的远程功能?我主要使用MySQL,但是我很好奇它是否曾经实现过,没有让应用程序调用类似于INET_ATON
函数的函数。
MS SQL确实具有这种性质,但是我想知道它是否仅仅是同义词。(例如,boolean
可以是tinyint(1)
或或或或postal_code
之一的同义词)同义词不是我要问的。char
varchar
(5
9
10)
IPv6
a 转换为a binary(16)
,还是仅限于别名(可用于state
s变成enum
s)
int
将不会为国际化数据库的工作-加拿大,例如,使用“A9A A9A”的格式。为邮政编码创建一个自定义数据类型可能是一个好主意。但是,您可能希望重新检查计划如何处理其中的一些问题(例如,将状态存储在单字节字段中可能会出现“其他”问题)。并且不要重新实现日期/时间数据类型,除非提供的数据类型异常不足(大小不计算在内),否则只会使人们感到困惑。