是否有自定义数据类型之类的东西?

700*_*are 15 mysql datatypes type-conversion

MySQL 是否支持自定义数据类型?例如,邮政编码可能存储在一个varchar(10)字段中,但它们可以被压缩到一个int,带有空白选项和一个关于它是 5 位还是 5+4 位邮政编码的标志。

有没有办法为这些东西安装无缝数据类型?就应用程序而言,它将是一个字符串类型,如果应用程序传递了无效数据,则只会发生数据截断(有或没有警告)。

可以使用自定义函数(例如,有一个INET_ATON用于 IPv4 地址的内置函数。但这不允许zip LIKE '12345%'应该正确索引的事情。对自定义数据类型的良好编写支持将允许标记数据类型作为可排序的。所以紧凑型zip int在排序时,会像排序一样排序zip varchar(10)

这将允许列具有固定宽度,它将允许 6 或 10 字节的变量存储减少到 4 字节的固定宽度。

有几种适用的用途

  • 邮政编码
  • IPv6 地址
  • 具有分钟级精度和容量的自定义时间戳字段,2038存储使用量少于datetime,但不需要支持实施年份之前的日期(如果这些是系统中最早的日期,则最小值可能是 2007 年)
  • 实现 DST 的时间戳(似乎不存在
  • 两个字母的美国州可以存储在一个字节中
  • long ENUMs 可以被分成一个自定义的数据类型,这样DESCRIBE's 的输出在所有的包装中看起来都不会那么凌乱。

我希望数据类型处理程序的存储方式类似于函数的存储方式。

在任何数据库引擎上都有这样的远程吗?我主要使用 MySQL,但我很好奇是否曾经实现过,没有让应用程序调用类似函数的INET_ATON函数。

MS SQL 似乎确实具有这种性质,但我想知道它是否不仅仅是同义词。(例如boolean可能是一个同义词tinyint(1),或postal_code为一个charvarchar (5910))同义词没有要问我关于这里。

Jac*_*las 15

MySQL 是否支持自定义数据类型?

简单的回答:没有

在任何数据库引擎上都有这样的远程吗?我主要使用 MySQL,但我很好奇这是否曾经实现过,没有让应用程序调用像 INET_ATON 函数这样的函数。

Oracle 在CREATE TYPE某种程度上类似于 OO 类,包括成员函数和继承等特性

PostgresCREATE TYPE有点不像 OO 类(没有成员函数或继承),但非常灵活和有用,甚至允许您创建新的基本类型。还有CREATE DOMAIN它允许某种形式的继承或子类型,并且基本上扩展了具有一些约束的基类型。默认情况下,Postgres 也有很多有趣的基本类型,例如inet几何类型。在 Postgres 中,可以用 C 为自定义数据类型编写扩展,例如在此示例中使用base36 数据类型

SQL ServerCREATE TYPE允许您根据现有系统数据类型创建自定义数据类型。例如,我可以创建一个名为的类型SSN,它基本上定义为,VARCHAR(11)但是这样我就不必记住它有多大。