2012-04-11 43 views
1

我见过的所有SQL方言都允许或要求为定义表时支持的某些数据类型指定整数参数。但我还没有设法找到任何全面的信息(至少对于MySQL和SQLite)这些数字究竟意味着什么,以及如何充分选择它们......如何选择SQL DDL类型参数?

+0

你能举个例子吗? – 2012-04-11 13:25:04

+0

INTEGER(11)。当我使用Navicat(一个GUI DB工具)从MySQL复制一个数据库时(我已经使用纯INT作为整数列),我得到了新的SQLite数据库,其整数列定义为INTEGER(11)。为什么?为什么不只是INTEGER? – Ivan 2012-04-11 13:33:20

+1

您可能想要查看Liquibase以独立于DBMS(和可控制)的方式管理您的模式定义。 – 2012-04-11 15:31:10

回答

0

如果你的意思是像INT(11)这样的符号, VARCHAR(255),通常它是从表中存储(或检索)的值的长度。

http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html http://dev.mysql.com/doc/refman/5.5/en/string-type-overview.html

支持它的每一个类型的名称后的括号有一个“M”。

另外,请记住,这些数字可能会影响存储和选择长度。例如,如果将列定义为VARCHAR(100),则为每个值保留的实际空间仍将为255.但是,在SELECT中检索的值将被裁减为100个字符。如果你定义了一个VARCHAR(256),那么它可以保留多达65535个字符。

与INT(5)相同。它仍然保留空间来存储值高达2147483647(有符号整数的最大值),但将输入/输出修剪为5位数。

+0

我知道这是价值观的长度,但我不确定它是多么地被衡量。我曾经假设它是以字节为单位或INT的一些特殊单位。我不想限制它,我只想存储一个从-2147483648到2147483647的标准整数,并尽可能统一我的表定义(对不同的DBMS使用相同的类型声明)。我可以使用INT或INTEGER作为MySQL,SQLite3和MS SQL Server吗?还是应该指定长度? – Ivan 2012-04-11 13:41:35

+0

我不认为编写跨DBMS DDL是一个好主意。你肯定会陷入困境;有时你甚至想为不同的SQL实现使用不同的类型。我认为如果你想创建一个跨DBMS数据库部署工具,你应该为此创建一个实用程序。分别调查每种类型,并在代码中确定您应该使用哪种类型的数据库管理系统(DBMS)。 – 2012-04-11 13:48:26

+0

但整数呢?你相信'INT'对于MySQL,SQLite3和MS SQL Server来说意味着什么,如果我忽略'(11)',我不会丢失任何数据? – Ivan 2012-04-11 13:52:14