Sequelize 数据类型 TEXT 不适用于 mySQL
Sequelize datatype TEXT not working with mySQL
我在 mySQL 数据库中使用 sequelize ORM。
我有一个属性类型为 TEXT 的模型:
description: {
type: Sequelize.TEXT,
unique: true
},
当我尝试为相应的模型创建 table 时,它给出了一条错误消息:
Unhandled rejection SequelizeDatabaseError:
ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column 'description' used in key
specification without a key length
这在与 postgreSQL 一起使用时效果很好。
我能想到的这个错误的可能原因是 mySQL 不支持 TEXT 数据类型,因此,我必须将其指定为 LONGTEXT。
如果我的想法是正确的,或者有其他原因,如果有人可以提供帮助。
esmrkbr 是正确的,mySQL 不接受 TEXT 字段上的 UNIQUE KEY,您需要改用 VARCHAR(请参阅:make text column as unique key). That being said, depending on the Database being used, you may need to explicitly specify a size for a TEXT (or BLOB) type. The documentation (http://docs.sequelizejs.com/en/latest/api/datatypes/)在这一点上非常简洁,而不是 link到代码中,目前只有以下信息:
An (un)limited length text column. Available lengths: tiny, medium,
long
您可以将大小作为字符串参数传递给类型。例如,要将其定义为 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;
}
};
您正在使用 unique: true
数据类型 TEXT
。你不能使用它。是否删除 unique: true
并重试?
像这样定义为字符串:
var filters = sequelize.define('filters', {
description: {
type: DataTypes.STRING,
validate: { notEmpty: true }
}
}
我在 mySQL 数据库中使用 sequelize ORM。
我有一个属性类型为 TEXT 的模型:
description: {
type: Sequelize.TEXT,
unique: true
},
当我尝试为相应的模型创建 table 时,它给出了一条错误消息:
Unhandled rejection SequelizeDatabaseError: ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column 'description' used in key specification without a key length
这在与 postgreSQL 一起使用时效果很好。 我能想到的这个错误的可能原因是 mySQL 不支持 TEXT 数据类型,因此,我必须将其指定为 LONGTEXT。
如果我的想法是正确的,或者有其他原因,如果有人可以提供帮助。
esmrkbr 是正确的,mySQL 不接受 TEXT 字段上的 UNIQUE KEY,您需要改用 VARCHAR(请参阅:make text column as unique key). That being said, depending on the Database being used, you may need to explicitly specify a size for a TEXT (or BLOB) type. The documentation (http://docs.sequelizejs.com/en/latest/api/datatypes/)在这一点上非常简洁,而不是 link到代码中,目前只有以下信息:
An (un)limited length text column. Available lengths: tiny, medium, long
您可以将大小作为字符串参数传递给类型。例如,要将其定义为 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;
}
};
您正在使用 unique: true
数据类型 TEXT
。你不能使用它。是否删除 unique: true
并重试?
像这样定义为字符串:
var filters = sequelize.define('filters', {
description: {
type: DataTypes.STRING,
validate: { notEmpty: true }
}
}