2011-05-09 87 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. 使用较大的列类型