我正在尝试使用blob类型列(内容)在SQLite中创建一个表:
create table [Files]
(
Id int identity not null
constraint PK_File_Id primary key,
MimeType nvarchar (400) not null,
Content varbinary (max) null
constraint DF_File_Content default (0x),
);
但是以下内容未被接受:
Content varbinary (max) null
constraint DF_File_Content default (0x),
为什么?
答案 0 :(得分:0)
"最大"是标准SQLite3函数的名称,因此不能作为类型名称的一部分使用。
答案 1 :(得分:0)
请参阅CREATE TABLE statement和data types的语法参考。 type name可以在括号中包含数字(会被忽略),但不能包含“MAX”这个词。
您似乎正在尝试使用MS SQL Server语法,并且代码中存在多个错误:
(max)
不被接受为类型名称的一部分。由于默认情况下值长度不受约束,因此只需省略它即可。varbinary
给出了“数字亲和力”列。虽然这样的列可以存储blob,但您可能希望将其声明为blob
。0x
不是有效的blob文字。编写空blob的正确方法是x''
。identity
被称为autoincrement
。并且为了使用它,类型名称必须是integer
而不是int
。 not null
是多余的:如果您尝试在此列中插入空值,则会获得自动递增的ROWID。
Id
在任何给定时间拥有唯一值,并且不关心先前删除的值是否被重复使用,那么您可以简单地将列声明为integer primary key
,插入null
将使用未使用的整数填充该列。 autoincrement
关键字阻止在数据库的生命周期内重用ROWID,更接近地匹配MS SQL的identity
关键字的语义。请参阅上面链接中的讨论。试试这个:
create table [Files]
(
Id integer primary key autoincrement,
MimeType nvarchar (400) not null,
Content blob null default (x'')
);
请注意,这不会对MimeType
列强制实施长度限制。如果需要,请添加约束check (length(MimeType) <= 400)
。