Sequelize数据类型TEXT不能与mySQL

时间:2016-03-07 07:53:55

标签: mysql node.js sequelize.js sqldatatypes

我正在使用sequelize ORM和mySQL数据库。

我有一个属性类型 TEXT 的模型:

description: {
            type: Sequelize.TEXT,
            unique: true
        },

当我尝试为相应的模型创建表时,它会给出错误消息:

  

未处理拒绝SequelizeDatabaseError:   ER_BLOB_KEY_WITHOUT_LENGTH:密钥中使用的BLOB / TEXT列'description'   没有密钥长度的规范

与postgreSQL一起使用时效果很好。 我能想到的这个错误的可能原因可能是mySQL不支持TEXT数据类型,因此,我必须将其指定为LONGTEXT。

如果我的想法正确或有其他原因,如果有人可以提供帮助。

3 个答案:

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