我正在使用sequelize ORM和mySQL数据库。
我有一个属性类型 TEXT 的模型:
description: {
type: Sequelize.TEXT,
unique: true
},
当我尝试为相应的模型创建表时,它会给出错误消息:
未处理拒绝SequelizeDatabaseError: ER_BLOB_KEY_WITHOUT_LENGTH:密钥中使用的BLOB / TEXT列'description' 没有密钥长度的规范
与postgreSQL一起使用时效果很好。 我能想到的这个错误的可能原因可能是mySQL不支持TEXT数据类型,因此,我必须将其指定为LONGTEXT。
如果我的想法正确或有其他原因,如果有人可以提供帮助。
答案 0 :(得分:6)
您正在使用unique: true
数据类型TEXT
。你不能使用它。您是否删除unique: true
并重试?
答案 1 :(得分:4)
esmrkbr是正确的,mySQL不接受TEXT字段上的UNIQUE KEY,你需要使用VARCHAR(参见:make text column as unique key)。话虽这么说,根据使用的数据库,您可能需要显式指定TEXT(或BLOB)类型的大小。文档(http://docs.sequelizejs.com/en/latest/api/datatypes/)在这一点上非常简洁,除了代码链接之外,目前只有以下信息:
(非)有限长度的文本列。可选长度:小,中, 长
您可以将字符串参数的大小传递给该类型。例如,要将其定义为LONGTEXT
,您需要:
description: {
type: Sequelize.TEXT('long')
},
lib / data-types.js中的代码具有以下映射到TEXT的SQL(对于BLOB也有类似的映射):
TEXT.prototype.toSql = function() {
switch (this._length.toLowerCase()) {
case 'tiny':
return 'TINYTEXT';
case 'medium':
return 'MEDIUMTEXT';
case 'long':
return 'LONGTEXT';
default:
return this.key;
}
};
答案 2 :(得分:0)
像这样定义为字符串:
var filters = sequelize.define('filters', {
description: {
type: DataTypes.STRING,
validate: { notEmpty: true }
}
}