关系型数据库Type Affinity
类型亲和 是什么?
列类型只是“建议”,值可以存成别的类型
类比:标签写着“放书”,但塞个杯子进去也不会报错
和传统数据库最大的不同
SQLite 是动态类型:声明 `age INTEGER` 只是“亲和性”,你往里插字符串 'abc' 也能成功。真正决定类型的是值本身,不是列定义。
这是为了兼容性和灵活性,但也意味着数据质量要靠应用层保证。
五种亲和性
建表时的类型名会被映射到这五种之一。
- INTEGER:整数优先
- TEXT:文本优先
- BLOB:原样存储,不做转换
- REAL:浮点优先
- NUMERIC:数值优先,能转数字就转
实践建议
虽然宽松,建表时仍要写清类型并加 CHECK 约束,否则排序和比较会出现意外(比如 '10' < '9' 按文本比较成立)。需要严格类型可以开 STRICT 表(3.37+)。