中间件速查手册
关系型数据库Type Affinity

类型亲和 是什么?

列类型只是“建议”,值可以存成别的类型

类比:标签写着“放书”,但塞个杯子进去也不会报错

和传统数据库最大的不同

SQLite 是动态类型:声明 `age INTEGER` 只是“亲和性”,你往里插字符串 'abc' 也能成功。真正决定类型的是值本身,不是列定义。

这是为了兼容性和灵活性,但也意味着数据质量要靠应用层保证。

五种亲和性

建表时的类型名会被映射到这五种之一。

  • INTEGER:整数优先
  • TEXT:文本优先
  • BLOB:原样存储,不做转换
  • REAL:浮点优先
  • NUMERIC:数值优先,能转数字就转

实践建议

虽然宽松,建表时仍要写清类型并加 CHECK 约束,否则排序和比较会出现意外(比如 '10' < '9' 按文本比较成立)。需要严格类型可以开 STRICT 表(3.37+)。

它出现在这些中间件里

相关概念