2011-05-09 61 views
1


我有php腳本插入文章在MySQL數據庫。 mysql中的字段類型是文本。
現在,當我插入大於32K的文章時,它僅被截斷爲32K。我知道的是在MySQL中的文本的最大大小是64K。
PS:MySQL版本是5.0.51a-24 + lenny5
PHP版本:PHP 5.3.2-1ubuntu4.9
的mysql:max_allowed_pa​​cket個= 16M在MySQL中的文本數據類型被截斷在32k

的爲什麼mysql的截斷它的任何想法或如何要解決這個問題??
**編輯**
我的字符集是通過選擇這個領域我得到了65768的十六進制UTF8
,如你所知每兩個十六進制數字代表一個字節,因此,這裏的實際尺寸是2分之65768 = 32884個

 
mysql> select length(hex(body)), length(body) from articles where article_id=62727; 
+-------------------+--------------+ 
| length(hex(body)) | length(body) | 
+-------------------+--------------+ 
|    65768 |  32884 | 
+-------------------+--------------+ 

感謝您的幫助

回答

1

來源:http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html

文本列了最大長度爲65535(2^16 - 1)個字符。 如果該值包含多字節字符,則有效最大長度較小。

所以,最大長度爲64K的字符只能用像ANSI這樣的字符集。例如,UTF-8使用多個字節對字符進行編碼,因此可以將更少的文本存儲在2^16個字節中。

+1

UTF-8 **可能會爲一個字符使用多個字節,但它也可能使用單個字節。這不像「UTF-8爲任何**字符使用超過1個字節」。 – binaryLV 2011-05-10 06:37:57

7

文本類型具有64K字節,而不是字符的長度,因此,如果您使用的每個字符使用多個字節字符集,則可能會出現此錯誤。

在你的情況下,字符串總是被截斷爲32k,它看起來像你正在使用一個UTF-16字符集,每個字符需要兩個字節。

你有兩種可能性:

  1. 使用單字節字符集
  2. 使用較大的列類型