mysql中的text数据类型被截断为32k

时间:2011-05-09 13:29:39

标签: php mysql truncate


我有php脚本在mysql DB中插入文章。 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会截断它或如何修复它? **编辑**
我的字符集是utf8
通过选择该字段的十六进制,我得到65768,并且如您所知,每两个十六进制数字代表一个字节,因此这里实际大小为65768/2 = 32884

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

感谢您的帮助

2 个答案:

答案 0 :(得分:7)

TEXT类型的长度为64k字节而不是字符,因此如果使用每个字符使用多个字节的字符集,则可能会发生此错误。

在你的情况下,字符串总是被截断为32k,看起来你使用的是UTF-16字符集,每个字符需要两个字节。

您有两种可能性:

  1. 使用单字节字符集
  2. 使用较大的列类型

答案 1 :(得分:1)

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

  

TEXT列,最大长度为65,535(2 ^ 16 - 1)个字符。   如果值包含多字节字符,则有效最大长度会减少。

因此,只有像ANSI这样的字符集才能实现64k字符的最大长度。例如,UTF-8使用多个字节来编码字符,因此可以在2 ^ 16字节中存储更少的文本。