tinyint(3) 在 (SQLite) SQL 中是啥意思?
Posted
技术标签:
【中文标题】tinyint(3) 在 (SQLite) SQL 中是啥意思?【英文标题】:What does tinyint(3) mean in (SQLite) SQL?tinyint(3) 在 (SQLite) SQL 中是什么意思? 【发布时间】:2012-06-18 03:02:38 【问题描述】:我意识到tinyint
是一个单字节整数(顺便问一下,它是有符号的还是无符号的?)。 (3)
的论点是什么意思?我已经搜索了,但找不到答案。
【问题讨论】:
我正在使用 sqlite,我看不出tinyint
和 tinyint(3)
之间有什么区别。
@Mk12 这是因为 SQLite“模拟实现”数据类型(基本上,它接受语法但忽略它)。阅读精美的手册。
【参考方案1】:
请参阅this blog page 了解 mysql 列类型定义。
对于数字类型,长度修饰符实际上是显示宽度,与字段中可以存储的内容无关。是的,就是这样 - TINYINT(1) 和 TINYINT(4) 都可以存储 -128..127 范围内的值(或无符号值 0..255),并且是完全相同的数据类型,只有一点点变化(涉及日期检索——见下文)。 以下是对显示宽度含义的解释,直接取自源代码:
显示宽度不限制可存储在列中的值的范围,也不限制宽度超过为列指定的值显示的位数。例如,指定为 SMALLINT(3) 的列的 SMALLINT 范围通常为 -32768 到 32767,超出三个字符允许范围的值使用三个以上的字符显示。
【讨论】:
问题是关于 SQLite 的,但我意识到 OP 在您回答后添加了这种精度。另一个答案现在更相关,不知道为什么这个答案被接受。【参考方案2】:SQLite“模拟实现”列上的数据类型。基本上,它接受标准 SQL 语法,但在其他方面忽略它。 (但请参阅类型亲和力和强制转换。)
请参阅“差异”文档中的Manifest Typing。
大多数 SQL 数据库引擎使用静态类型。数据类型与表中的每一列相关联,并且仅允许将该特定数据类型的值存储在该列中。 SQLite 通过使用清单类型来放宽这个限制。 在清单类型中,数据类型是值本身的属性,而不是存储该值的列的属性。 因此,SQLite 允许用户将任何数据类型的任何值存储到任何列中,而不管该列的声明类型。 (此规则有一些例外情况:INTEGER PRIMARY KEY 列只能存储整数。SQLite 会尝试将值强制到列的声明数据类型中如果可以 em>。)
另请参阅Datatypes in SQLite Version 3 和类型关联:
列的亲和性由列的声明类型决定,按照以下规则按显示的顺序排列:
如果声明的类型包含字符串“INT”,则为其分配 INTEGER 亲和性。
[为简洁省略其他规则]
对于其他数据库,请参阅相应的数据库特定文档:-)
【讨论】:
以上是关于tinyint(3) 在 (SQLite) SQL 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 中的 tinyint 到 C# 中的字节