SQLite允许输入超出CHAR(p)定义长度的内容 未强制执行长度限制的原因是什么
SQLite未强制校验CHAR类型长度限制的原因
这是SQLite本身的动态类型设计特性,和传统支持静态类型的关系型数据库逻辑不同,核心原因如下:
- SQLite采用动态类型系统,你在字段定义时写的
CHAR(n)、VARCHAR(n)这类带长度的字符类型,并不会被SQLite作为强制约束处理。这类类型声明只会被识别为「TEXT亲和性」的字段,附带的长度参数仅用于兼容其他数据库的SQL语法,没有实际的校验作用。 - 只要你插入的内容可以被转换为TEXT类型,SQLite就会原样写入存储,既不会主动截断超长内容,也不会抛出长度不符合的错误。
如果需要实现指定长度的强制校验,可以手动给字段添加CHECK约束,示例如下:
CREATE TABLE Stocks ( name CHAR(24), price CHAR(22), symbol CHAR(3) CHECK (LENGTH(symbol) <= 3), PRIMARY KEY (name) );
添加上述约束后,插入长度超过3的字符串时就会触发约束错误,拒绝写入不符合要求的数据。
内容的提问来源于stack exchange,提问作者Qwertford
相关产品推荐
相关产品推荐

