tinyint(3)在(SQLite)SQL中意味着什么?

mk1*_*k12 5 sql sqlite tinyint

我意识到这tinyint是一个单字节整数(顺便说一下,它是有符号还是无符号?).这个论点(3)意味着什么?我搜索过,找不到答案.

小智 7

SQLite"mock实现" 上的数据类型.基本上,它接受标准的SQL语法,但忽略它.(但请参阅类型亲和力和强制.)

请参阅"差异"文档中的Manifest Typing.

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

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

列的亲缘关系由声明的列类型决定,根据以下显示的顺序规则:

  • 如果声明的类型包含字符串"INT",则为其分配INTEGER affinity.

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


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


Dou*_*rie 5

有关MySQL列类型定义,请参见此博客页面

对于数字类型,长度修饰符实际上是显示宽度,与可以存储在字段中的内容无关。是的,仅此而已– TINYINT(1)和TINYINT(4)都可以存储-128..127范围内的值(或无符号值0..255的值),并且它们是完全相同的数据类型,只有一小段时间(涉及日期)检索-参见下文)。这是对显示宽度的解释,直接从源头获取:

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

  • 问题是关于SQLite的,但我意识到OP在您回答后增加了这种精度。另一个答案现在更相关,不确定为什么会接受。 (2认同)