限制输入 SQLite3 的字符数
Posted
技术标签:
【中文标题】限制输入 SQLite3 的字符数【英文标题】:Restriciting Number of Characters entered into SQLite3 【发布时间】:2019-04-13 19:36:40 【问题描述】:我正在尝试创建一个包含以下字段的 SQL 数据库:
connection= sqlite3.connect('Main Database')
crsr = connection.cursor()
#Creates a table for the teacher data if no table is found on the system
crsr.execute("""CREATE TABLE IF NOT EXISTS Teacher_Table(Teacher_ID INTEGER PRIMARY KEY,
TFirst_Name VARCHAR(25) NOT NULL,
TLast_Name VARCHAR (25) NOT NULL,
Gender CHAR(1) NOT NULL,
Home_Address VARCHAR (50) NOT NULL,
Contact_Number VARCHAR (14) NOT NULL);""")
connection.commit()
connection.close()
但是当我输入值时,性别字段接受多个值 Database View
如何确保它只接受该字段的一个字符
【问题讨论】:
SqlLite 忽略长度约束sqlite.org/datatype3.html 如果尝试插入多个字符,您希望发生什么:出错或静默截断为一个字符? 【参考方案1】:如何确保它只接受该字段的一个字符
SQLite 不检查类型级别定义的长度约束,如documentation on types 中所指定:
(...) 请注意,类型名称后面的括号中的数字参数(例如:“
VARCHAR(255)
”)会被 SQLite 忽略 - SQLite 会不对字符串、BLOB 或数值的长度施加任何长度限制(除了大的全局SQLITE_MAX_LENGTH
限制)。
所以您不能在数据库级别强制执行此操作。因此,您需要通过您的视图等来强制执行此操作。
但是,我们可以像@Ilja Everilä 所说的那样,使用CHECK
约束:
CREATE TABLE IF NOT EXISTS Teacher_Table(
Teacher_ID INTEGER PRIMARY KEY,
TFirst_Name VARCHAR(25) NOT NULL,
TLast_Name VARCHAR (25) NOT NULL,
Gender CHAR(1) NOT NULL CHECK (length(Gender) < 2),
Home_Address VARCHAR (50) NOT NULL,
Contact_Number VARCHAR (14) NOT NULL
)
【讨论】:
@IljaEverilä:是的,很有趣,mysql 忽略了CHECK
,使得“SQL 格局”变得非常混乱:s。以上是关于限制输入 SQLite3 的字符数的主要内容,如果未能解决你的问题,请参考以下文章