我意识到tinyint
是一个单字节整数(顺便说一下,它是有符号还是无符号?)。论证(3)
表示什么?我搜索过,找不到答案。
答案 0 :(得分:6)
SQLite“mock实现”列上的数据类型。基本上,它接受标准的SQL语法,但忽略它。 (但请参阅类型亲和力和强制。)
请参阅“差异”文档中的Manifest Typing。
大多数SQL数据库引擎都使用静态类型。数据类型与表中的每个列相关联,并且只允许该特定数据类型的值存储在该列中。 SQLite通过使用清单类型来放宽此限制。 在清单类型中,数据类型是值本身的属性,而不是存储值的列的属性。 SQLite因此允许用户将任何数据类型的任何值存储到任何列中,而不管声明该列的类型。 (此规则有一些例外:INTEGER PRIMARY KEY列可能只存储整数。 SQLite尝试将强制值强制转换为列的声明数据类型> EM> 即可。)
另见Datatypes in SQLite Version 3和类型亲和力:
列的亲和力由声明的列类型决定,按照以下规则显示:
如果声明的类型包含字符串“INT”,则会为其指定INTEGER亲和力。
[为简洁省略了其他规则]
对于其他数据库,请参阅相应的特定于数据库的文档: - )
答案 1 :(得分:4)
请参阅this blog page有关MySQL列类型定义的内容。
对于数字类型,长度修饰符实际上是显示宽度,它与可以存储在字段中的内容无关。是的,就是这样--TINYINT(1)和TINYINT(4)都可以存储-128..127范围内的值(或无符号值0..255),并且是完全相同的数据类型,只有一个小的扭曲(涉及日期)检索 - 见下文)。 以下是对显示宽度的含义的解释,直接取自来源:
显示宽度不会限制可以存储在列中的值的范围,也不会限制宽度超过为列指定的值的值显示的位数。例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超出三个字符所允许的范围之外的值将使用三个以上的字符显示。