首页 文章

Sequelize数据类型TEXT不能与mySQL一起使用

提问于
浏览
3

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

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

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

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

未处理的拒绝SequelizeDatabaseError:ER_BLOB_KEY_WITHOUT_LENGTH:BLOB / TEXT列'描述'用于密钥规范而没有密钥长度

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

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

3 回答

  • 3

    您正在使用 unique: true 与数据类型 TEXT . 你不能使用它 . 你删除 unique: true 并再试一次吗?

  • 0

    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;
      }
    };
    
  • 4

    像这样定义为字符串:

    var filters = sequelize.define('filters', {
     description: { 
      type: DataTypes.STRING, 
      validate: { notEmpty: true }
     }
    }
    

相关问题