2009-10-20 94 views
16

如果我在表中列有VARCHAR(15)類型的字段,如果我嘗試插入長度爲16的數據,MySQL的給出了一個錯誤,說明的MySQL VARCHAR的大小限制

Data too long for column 'testname' at row 1 

有誰知道在MySQL爲什麼VARCHAR領域採取固定長度?根據給定的大小,每個記錄還有多少個字節的VARCHAR字段?

+4

@Camilo - 假裝它,直到你做到了! – Ben 2013-05-24 05:44:40

回答

13

如果您將列設置爲varchar(15),則允許的最大字節數爲15個。因此,如果不存儲超過15個字符而無需修改列以支持超過15個字符。如果存儲4個字符的字符串,在可能的15個字節中使用大約4個字節,而如果使用了char(15),則會使用空字節填充其他11個字節。

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

(我的字節計算可能是關閉,因爲它總是-1/+ 1或類似的東西)。

+0

謝謝。 在我的情況下,我真的不確定數據傳入的時間長度是多少。它可能很長,也可能很小。更加精確: 如果我將列指定爲Varchar(100),那麼數據可以是100個字符或可以是50個字符。 只是爲了讓我的理解清楚。你的意思是它只會作爲CHAR數據類型。我的意思是它會爲每個記錄佔用100個字節或僅插入50個字節。同樣在其他RDBMS中如果我沒有指定varchar限制,或者甚至在指定限制之後,它允許我插入比這更多的字符。 在MYSQL中可能嗎? – 2009-10-20 06:31:31

+0

如果你將它設置爲'varchar(100)',並且你的行數據是50個字符,那麼它只會佔用一半,它不會充當填充餘下字節的char。 – 2009-10-20 06:42:44

+0

謝謝,但在varchar(100)列中插入超過100個字節是不可能的。 對不起,一次又一次地提出同樣的問題。但是我想在將任何大小設置到列前非常確定。 再次感謝。 – 2009-10-20 06:56:56

1

如果你在這裏看它應該告訴你一切關於VARCHAR你想知道: http://dev.mysql.com/doc/refman/5.0/en/char.html

基本上取決於長度您選擇它會使用1個或兩個字節來跟蹤當前字符串的長度該列,因此它將存儲您輸入的數據的字節數加上一個或兩個字節。

所以,如果你輸入'abc',那麼它將在該行中用於該列的4或5個字節。

如果您使用了char(15),那麼即使'abc'也會佔用15個字節,因爲數據是右填充滿了15個字節。

+0

嗨James, 你的意思是數據是正確填充的?同樣,你的意思是,即使我在varchar(15)列中輸入10個字符,這將需要整個15字節的10個字符,如Char(15)將採取。 – 2009-10-20 06:38:56

+0

不,正確的填充是char,不是varchar。 – 2009-10-20 12:18:56

13

MySQL 5.0 Manual

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

我只使用VARCHAR,當我一定該列需要保存的數據將不會超過一定的長度,即使在那時,我持謹慎態度。如果我存儲一個文本字符串,我傾向於使用其中一種TEXT類型。

查看MySQL Storage Requirements瞭解有關如何使用字節的更多信息。

3

小額外的本地筆記。使用的字節數取決於使用的編碼方案。每個拉丁字符編碼1個字節,但UTF8最多3個字符。有關詳細信息,請參閱mlambie的答案中的鏈接。

+0

謝謝。 是的。我將使用UTF-8,因此需要雙字節。 – 2009-10-20 06:32:28