我有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_packet = 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 | +-------------------+--------------+
感谢您的帮助
答案 0 :(得分:7)
TEXT类型的长度为64k字节而不是字符,因此如果使用每个字符使用多个字节的字符集,则可能会发生此错误。
在你的情况下,字符串总是被截断为32k,看起来你使用的是UTF-16字符集,每个字符需要两个字节。
您有两种可能性:
答案 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字节中存储更少的文本。