AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 5098
Accepted
700 Software
700 Software
Asked: 2011-08-27 08:29:03 +0800 CST2011-08-27 08:29:03 +0800 CST 2011-08-27 08:29:03 +0800 CST

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

  • 772

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是charorvarchar (5或9or之一的10)同义词)同义词不是我在这里要问的。

mysql datatypes
  • 2 2 个回答
  • 17500 Views

2 个回答

  • Voted
  1. Best Answer
    Jack Douglas
    2011-08-27T10:04:43+08:002011-08-27T10:04:43+08:00

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

    简单的回答:没有

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

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

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

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

    • 15
  2. Tibor
    2019-08-08T10:22:39+08:002019-08-08T10:22:39+08:00

    Firebird也有它的解决方案domain。

    在 Firebird 中,“用户定义的数据类型”的概念是以域的形式实现的。当然,创建域并不能真正创建新的数据类型。域提供了用一组属性封装现有数据类型的方法,并使该“封装”可用于整个数据库的多种用途。如果多个表需要定义具有相同或几乎相同属性的列,则域是有意义的。

    域使用不限于表和视图的列定义。域可用于在 PSQL 代码中声明输入和输出参数和变量。

    • 1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve