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

Pre*_*ain 5 mysql sqldatatypes node.js sequelize.js

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

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

description: {
            type: Sequelize.TEXT,
            unique: true
        },
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Gee*_*aks 7

esmrkbr 是正确的,mySQL 不接受文本字段上的 UNIQUE KEY,您需要使用 VARCHAR 代替(请参阅:使文本列作为唯一键)。话虽如此,根据所使用的数据库,您可能需要明确指定 TEXT(或 BLOB)类型的大小。文档(http://docs.sequelizejs.com/en/latest/api/datatypes/)在这一点上非常简洁,除了代码链接之外,目前只有以下信息:

一个(无)限制长度的文本列。可用长度:小、中、长

您可以将大小作为字符串参数传递给类型。例如,要按照LONGTEXT您的需要定义它:

description: {
            type: Sequelize.TEXT('long')
        },
Run Code Online (Sandbox Code Playgroud)

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;
  }
};
Run Code Online (Sandbox Code Playgroud)


小智 6

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