亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL錯誤:沒有密鑰長度的密鑰規范

MySQL錯誤:沒有密鑰長度的密鑰規范

鴻蒙傳說 2019-07-11 16:09:46
MySQL錯誤:沒有密鑰長度的密鑰規范我有一個表,它的主鍵是varchar(255)。有些情況下,255個字符是不夠的。我嘗試將字段更改為文本,但得到了以下錯誤:BLOB/TEXT column 'message_id' used in key specification without a key length我怎么才能解決這個問題?編輯:我還應該指出,這個表有一個包含多列的復合主鍵。
查看完整描述

3 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

發生此錯誤是因為MySQL只能索引BLOB或TEXT列。因此,錯誤主要發生在TEXT或者那些屬于TEXTBLOB類型,如TINYBLOBMEDIUMBLOBLONGBLOBTINYTEXTMEDIUMTEXT,和LONGTEXT你試著做一個主鍵或索引。滿足感BLOBTEXT如果沒有長度值,MySQL無法保證列的唯一性,因為它具有變量和動態大小。所以,當使用BLOBTEXT類型作為索引,必須提供N的值,這樣MySQL才能確定鍵長度。但是,MySQL不支持TEXTBLOBTEXT(88)根本沒用。

轉換表列時,也會彈出該錯誤。non-TEXTnon-BLOB類型,如VARCHARENUMTEXTBLOB類型,列已定義為唯一約束或索引。ALTERTABLE SQL命令將失敗。

問題的解決方案是刪除TEXTBLOB列來自索引或唯一約束,或將另一個字段設置為主鍵。如果您不能這樣做,并且希望對TEXTBLOB列,嘗試使用VARCHAR鍵入并在其上設置長度限制。默認情況下,VARCHAR限制為最多255個字符,且其限制必須在其聲明后的括號內隱式指定,即VARCHAR(200)將限制為200個字符的長度。

有時,即使你不使用TEXTBLOB相關類型在您的表中,錯誤1170也可能出現。它發生在一種情況下,例如當您指定VARCHAR列作為主鍵,但設置的長度或字符大小錯誤。VARCHAR只能接受最多256個字符,因此任何諸如VARCHAR(512)將迫使mysql自動轉換VARCHAR(512)轉到SMALLTEXTdataType,如果將列用作主鍵或唯一或非唯一索引,則數據類型將失敗,從而導致鍵長度上的錯誤1170。若要解決此問題,請將小于256的數字指定為VARCHAR場。

參考資料:MySQLError 1170(42000):鍵規范中使用的BLOB/Text列沒有密鑰長度


查看完整回答
反對 回復 2019-07-11
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

應該定義TEXT要索引的列。

InnoDB有限制768每個索引鍵的字節數,您將不能創建一個比這更長的索引。

這樣做會很好:

CREATE TABLE t_length (
      mydata TEXT NOT NULL,
      KEY ix_length_mydata (mydata(255)))
    ENGINE=InnoDB;

注意,鍵大小的最大值取決于列字符集。它是767單字節字符集的字符,如LATIN1而且只有255字符UTF8 (MySQL只使用BMP這最多需要3每個字符的字節)

如果您需要整個專欄成為PRIMARY KEY,計算SHA1MD5散列,并將其用作PRIMARY KEY.


查看完整回答
反對 回復 2019-07-11
  • 3 回答
  • 0 關注
  • 915 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號