SQLite 不检查数据类型
Posted
技术标签:
【中文标题】SQLite 不检查数据类型【英文标题】:SQLite does not check Data Types 【发布时间】:2017-11-01 09:35:14 【问题描述】:尊敬的 Stack Overflow 社区,
我第一次尝试数据库设计时遇到了一点问题。
我尝试制作某种表格并尝试检查基本功能;使用 Python3 和 SQLite3 编写。
我的问题很简单,我有几行:
cur.execute('CREATE TABLE IF NOT EXISTS test(a INTEGER, argument DATE)')
现在我可以写了:
cur.execute('insert into test (a, argument) values (?,?)', "bla", "blabla")
没有收到错误消息;当您在CREATE TABLE
语句中定义允许的数据类型时,该命令不应该被 SQL 自动禁止吗?
完整代码在这里:http://codepad.org/kf4gZB7m
【问题讨论】:
欢迎来到 SO,用问题中的代码更新您的问题 【参考方案1】:这是一项功能,而不是错误。 SQLite 使用动态类型。见https://sqlite.org/faq.html#q3
【讨论】:
好的,谢谢您的回答!此功能是否与某些性能损失或更高的内存消耗有关?如果是,有没有办法禁用此功能? 不知道内存消耗,但肯定没有办法让 SQLite 更严格的类型。你需要一个不同的 SQL 实现。 SQLite 通常使用更少的内存并且比其他数据库更快,但是比较嵌入式和客户端/服务器数据库并没有真正意义。如果你真的需要,可以add manual checks。 这是一个非常糟糕的功能。至少应该有一种方法可以打开正确的类型检查。 :-/【参考方案2】:此功能是类型相似性:
使用严格类型的 SQL 数据库引擎通常会尝试 自动将值转换为适当的数据类型。这 这里的重要思想是该类型是推荐的,而不是必需的。
文档:https://sqlite.org/datatype3.html#affinity
【讨论】:
以上是关于SQLite 不检查数据类型的主要内容,如果未能解决你的问题,请参考以下文章