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 }
 }
}