接受字符串值和整数值的布尔数据类型

时间:2012-05-27 06:08:35

标签: sqlite boolean

具有布尔列的表,布尔值应该只接受值0或1,但它接受int值和字符串值。

这是表架构 -

CREATE TABLE maintable_slave ( din INTEGER, strip_no integer, strip_status boolean);

这是我正在更新列的查询 -

update maintable_slave set strip_status = 5 where din = 1;

update maintable_slave set strip_status = 'add' where din = 1;

这里是strip_status布尔列,接受字符串和整数值。

2 个答案:

答案 0 :(得分:4)

这是一个经常被问到的问题 - 它实际上是SQLite's FAQ

  

(3)SQLite允许我将一个字符串插入一个整数类型的数据库列中!

     

这是一个功能,而不是一个bug。 SQLite使用dynamic typing。它不强制实施数据类型约束。任何数据都可以插入任何列。您可以将任意长度字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中为列分配的datatype不会限制可以将哪些数据放入该列。每列都能容纳一个任意长度的字符串。 (有一个例外:类型INTEGER PRIMARY KEY的列可能只包含64位有符号整数。如果您尝试将除整数之外的任何内容放入INTEGER PRIMARY KEY列,则会导致错误。)

     

但SQLite确实使用声明的列类型作为提示,您更喜欢该格式的值。因此,例如,如果列的类型为INTEGER,并且您尝试将字符串插入该列,则SQLite将尝试将该字符串转换为整数。如果可以的话,它会插入整数。如果没有,则插入字符串。此功能称为type affinity

答案 1 :(得分:0)

SQLite使用动态类型,这意味着任何值都可以存储在任何列中。关于列的类型,SQLite documentation表示:

  

这里的重要思想是建议使用该类型,而不是必需的。任何列仍然可以存储任何类型的数据。