7

我意识到这tinyint是一个单字节整数(顺便说一句,它是有符号的还是无符号的?)。论据有什么(3)意义?我已经搜索并找不到答案。

4

2 回答 2

7

SQLite 在columns上“模拟实现”数据类型。基本上,它接受标准 SQL 语法,但在其他方面忽略它。(但请参阅类型亲和力和强制。)

请参阅“差异”文档中的清单类型。

大多数 SQL 数据库引擎使用静态类型。数据类型与表中的每一列相关联,并且仅允许将该特定数据类型的值存储在该列中。SQLite 通过使用清单类型来放宽这个限制。在清单类型中,数据类型是值本身的属性,而不是存储值的列的属性。因此,SQLite 允许用户将任何数据类型的任何值存储到任何列中,而不管该列的声明类型如何。(此规则有一些例外情况:INTEGER PRIMARY KEY 列只能存储整数。并且SQLite 会尝试将值强制转换为列声明数据类型。)

另请参阅SQLite 版本 3 中的数据类型和类型关联:

列的亲和性由列的声明类型确定,根据以下规则按所示顺序确定:

  • 如果声明的类型包含字符串“INT”,则为其分配 INTEGER 亲和性。

  • [为简洁起见省略其他规则]


对于其他数据库,请参阅相应的特定于数据库的文档 :-)

于 2012-06-15T02:44:32.423 回答
5

请参阅有关 MySQL 列类型定义的博客页面。

对于数字类型,长度修饰符实际上是显示宽度,与字段中可以存储的内容无关。是的,就是这样 - TINYINT(1) 和 TINYINT(4) 都可以存储 -128..127 范围内的值(或无符号值 0..255),并且是完全相同的数据类型,只有一点点变化(涉及日期检索——见下文)。以下是直接取自源代码的显示宽度含义的解释:

显示宽度不限制可以存储在列中的值的范围,也不限制宽度超过为列指定的值显示的位数。例如,指定为 SMALLINT(3) 的列的 SMALLINT 范围通常为 -32768 到 32767,超出三个字符允许范围的值使用三个以上的字符显示。

于 2012-06-15T02:40:13.643 回答