SQLite3整型的最大值

74
  1. 在sqlite3中,INTEGER数据类型的最大值是多少?
  2. 如何将IP地址存储在数据库中?
  3. 什么是“attached”?
  4. 如何使用SQL DDL创建属于特定数据库的表?
  5. 这个错误是关于什么的?

在系统目录列表中出现错误:找不到表:temp.sqlite_master 无法执行语句

  1. sqlite3的文本数据类型是否支持Unicode?谢谢。

31
不要提出与问题无关的额外问题。针对具体问题提出特定的问题并询问新问题。让我们不把这个线程变成 SQLite 教程。 - Gabriele Petrioli
5个回答

131

9
一个8字节的有符号整数的最大值应该是2^63-1,换句话说,范围应该是-2^63到2^63-1。 - SayeedHussain
3
在SQLite中存储IP地址最有效的方法是使用"BLOB"数据类型。IPv4地址可用"BLOB(4)"存储,IPv6地址可用"BLOB(16)"存储。但是,在SQLite中存储IP地址最简单的方法是使用"TEXT"数据类型。注意,翻译后不包括解释和任何其他内容。 - hanshenrik
存储类比数据类型更为通用。例如,INTEGER 存储类包括 6 种不同长度的整数数据类型。这在磁盘上会有所区别。但是,一旦 INTEGER 值从磁盘读取到内存中进行处理,它们就会转换为最通用的数据类型(8 字节有符号整数)。 - ChrisCrossCrash
我认为,如果您要存储任何将被视为不可变的内容,除了 ID 字段之外,它应该是一个字符串。也就是说,任何独立于其前后内容的不可变内容都应该是字符串。 - SLWW

9
整数。该值是带符号的整数,根据值的大小存储在1、2、3、4、6或8字节中。
例如,INTEGER存储类包括6种不同长度的整数数据类型。这在磁盘上会有所区别。但是,一旦从磁盘读取INTEGER值并进入内存进行处理,它们就会转换为最通用的数据类型(8字节带符号整数)。
来自http://www.sqlite.org/datatype3.html 除非有其他原因,否则可以使用TEXT存储IP地址。

1
根据值的大小而定。如何设置?编辑:我很蠢,它会自动确定所需的长度。因此,您可以输入一个巨大的数字,它会发现它很大,并自动使用8个字节来存储它!我之前想的是必须声明integer(8)之类的东西...但不是这样的。 - Luc

3
关于第二个问题:
你可以用两种方式将IP地址存储在数据库中:
1. 作为字符串。这是推荐的方法,因为它支持IPv4和IPv6,并且不需要额外的IP地址转换操作。
2. 作为整数。IP基本上是4个字节,可以全部合并成一个整数值。但是,你真的想要这样吗?这将给你带来大量的痛苦,在需要时进行字符串/整数之间的转换。

2
  • 如何在数据库中存储IP地址?

最简单的方法是以字符串形式存储(例如,“127.0.0.1”或“::1”),因为这样你可以手动读取它们,如果必要,重新解析为地址结构也很容易。SQLite 喜欢字符串(使用 TEXT 类型)并且能有效地处理它们。


3
除非你在为互联网服务提供商工作,否则尝试将IP地址分解为其组成部分很可能是错误的。 - Donal Fellows

2

sqlite3的文本数据类型支持Unicode吗?

是和否。

是的,SQLite允许你使用UTF-8或UTF-16存储TEXT数据。(使用PRAGMA ENCODING选择内部格式。)

不是的,内置的LOWERUPPER函数只影响ASCII字符。但你可以重新定义函数排序规则来添加此支持。SQLite有一个ICU扩展来实现这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接