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,我看不出 tinyinttinyint(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# 中的字节

将 TINYINT 添加到 Doctrine SQL 类型

我可以在 Java 中使用 resultset.getBoolean 在 SQL 中获取 Tinyint

[QT][SQL]sql学习记录3_sqlite 使用

使用 .sql 文件和 FMDB 创建数据库结构

sql server intbigintsmallint 和 tinyint