我使用sqlite作为我的应用程序的后端数据库,并将float值存储在' 数据类型列中,但它也存储字符串值。 我知道数据可以在前端检查,但我想知道为什么sqlite不检查插入记录的数据。
答案 0 :(得分:2)
SQLite使用动态类型,即值的数据类型与值本身相关联,而不是与其容器相关联。它不强制实施数据类型约束。您可以在任何列中存储任何类型的数据。在SQLite here中阅读有关此here和数据类型的详细信息。
大多数SQL数据库引擎(除了SQLite之外的每个SQL数据库引擎,据我们所知)都使用静态,严格的类型。使用静态类型,值的数据类型由其容器(存储值的特定列)确定。
SQLite使用更通用的动态类型系统。在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联。 SQLite的动态类型系统向后兼容其他数据库引擎的更常见的静态类型系统,因为在静态类型数据库上工作的SQL语句应该在SQLite中以相同的方式工作。但是,SQLite中的动态类型允许它执行传统刚性类型数据库中无法实现的操作。
在您的情况下, SQLite尝试将您传递的值asasassas
转换为双/浮动值,但由于未能这样做,因此它已将值插入{ {1}}。 SQLite的这个功能称为type affinity。