2010-03-04 247 views
3

如果這事,我還設置它獨特的爲什麼不能我設置的varchar爲1000的長度

我已經成功地爲VARCHAR設定的上限爲(它被設置爲唯一還)。

+1

我的數據庫是MySQL的5.0.45 – AleGore 2010-03-04 17:29:33

+1

745的限制是因爲InnoDB的數據庫類型的限制(應該是多一點,但我認爲這是連接):*指數關鍵字前綴可以達到767字節。請參見第12.1.8節「CREATE INDEX語法」。http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html另請參閱我的答案。 – 2010-03-04 17:43:27

回答

1

舊的mysql?

5和更新可以使用LONG VARCHAR

http://dev.mysql.com/doc/refman/5.0/en/char.html

值在VARCHAR列是 可變長度字符串。可以將指定長度爲 的值設置爲MySQL 5.0.3之前的0至 255,0.0.3及更高版本中的0至 65,535。 在MySQL 5.0.3一個 VARCHAR的有效最大長度和後面是 受到的最大行大小 (65535個字節,這是其中 所有列共用)和 所使用的字符集。

+1

新。我可以將varchar設置爲1000,但前提是它沒有設置爲唯一。 – AleGore 2010-03-04 17:27:09

4

取決於你所使用的MySQL版本中,5.0.3之前有對VARCHAR 255個字符的限制:

價值觀VARCHAR列 變長字符串。可以將指定長度爲 的值設置爲MySQL 5.0.3之前的0至 255,0.0.3及更高版本中的0至 65,535。

來源:http://dev.mysql.com/doc/refman/5.0/en/char.html

1

圍繞MySQL手冊小訪問應是有用的: http://dev.mysql.com/doc/refman/5.0/en/char.html

價值觀VARCHAR列是可變長度的字符串。在MySQL 5.0.3之前,長度可以指定爲0到255之間的值,5.0.3和更高版本中的長度可以爲0到65,535。 MySQL 5.0.3及更高版本中VARCHAR的有效最大長度取決於最大行大小(65,535字節,在所有列中共享)和使用的字符集。

附加: 鍵值長度不能超過500個字符。 (報告爲http://bugs.mysql.com/bug.php?id=2130

+0

太多了。 4個答案和所有引用從同一頁,哈哈。 – 2010-03-04 17:26:59

+0

此處列出了另一個限制。這個限制就是答案。 – osgx 2010-03-04 17:29:43

0

下一步的長度可能是text,儘管據我所知有一些非常巨大的數據庫內長度限制,如果有的話,所以你必須提供限制編程sql /後端應用程序邏輯。

2

更新:

也許它與最大密鑰長度做1000的字節:

的最大密鑰長度爲1000個字節。這也可以通過改變源代碼和重新編譯來改變。對於密鑰長度超過250個字節的情況,使用比缺省值1024字節更大的密鑰塊大小。

由於索引是爲鍵創建的,而且它沒有索引而工作,所以這是有道理的。
儘管如此,您可以在varchar列中使用大於1000字節的索引,如下面的答案中所示。

或者,如果你正使用InnoDB,然後有一些restrictions

索引鍵的前綴可高達767個字節。請參見第12.1.8節「CREATE INDEX語法」。


我認爲它是確保該指數並沒有得到太大,工作接受快。

如果字符串列很可能在第一個字符數上有一個唯一的前綴,那麼最好只索引這個前綴,使用MySQL支持在列的最左邊部分創建一個索引(請參見第12.1.8節「CREATE INDEX語法」)。 較短的索引速度更快,這不僅僅是因爲它們需要較少的磁盤空間,還因爲它們還會在索引緩存中爲您提供更多的點擊量,從而減少磁盤查找次數。請參見第7.5.3節「調整服務器參數」。

這意味着您還可以定義應該被索引的列的第一個n字符。也許這有助於規避問題。

例子:

CREATE INDEX part_of_name ON customer (name(10)); 
相關問題