2016-03-07 177 views
3

我正在使用sequelize ORM和mySQL數據庫。Sequelize數據類型TEXT不能與mySQL配合使用

我有一個屬性類型TEXT作爲模型:

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

當我試圖對相應的模型創建表,它給了一個錯誤消息:

Unhandled rejection SequelizeDatabaseError: ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column 'description' used in key specification without a key length

這與postgreSQL一起使用時效果很好。 我可以想到的這個錯誤的可能原因可能是mySQL不支持TEXT數據類型,因此我必須指定它爲LONGTEXT。

如果我想的是正確的,或者是否有其他原因,如果有人可以提供幫助。

回答

4

您在使用unique: true,數據類型爲TEXT。你不能使用它。您是否刪除unique: true並重試?

+1

啊 - 很好看!我忘了mySQL不支持TEXT UNIQUE - http://stackoverflow.com/questions/14033378/make-text-column-as-unique-key – GeekyDeaks

+0

是的。感謝esmrkbr,它工作。 和@GeekyDeaks,你爲什麼刪除了你的答案,這也有幫助。 –

+0

好的 - 如果您認爲它有幫助,我會重新放入! :) – GeekyDeaks

3

esmrkbr是正確的,mySQL不接受TEXT字段上的UNIQUE KEY,您需要使用VARCHAR(請參閱:make text column as unique key)。這就是說,根據所使用的數據庫,您可能需要爲TEXT(或BLOB)類型顯式指定大小。文檔(http://docs.sequelizejs.com/en/latest/api/datatypes/)在這一點上比鏈接代碼簡潔漂亮等,目前僅具有以下信息:

An (un)limited length text column. Available lengths: tiny, medium, long

您可以通過大小爲一個字符串參數類型。例如,把它定義爲LONGTEXT你將需要:

description: { 
      type: Sequelize.TEXT('long') 
     }, 

在LIB /數據types.js的代碼具有以下映射到SQL爲TEXT(有一個類似的一個用於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; 
    } 
}; 
+0

感謝@GeekyDeaks,但仍是同樣的錯誤來了。 –

+0

嗨@PrernaJain,使用日誌啓用了什麼SQL它輸出的CREATE TABLE? – GeekyDeaks

+0

謝謝你的解釋性答案。 和是啊,我不明白你在問什麼,你可以解釋一下更多。 @GeekyDeaks –

0

定義爲字符串,像這樣:

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