缘由
今天学校里的老师让我帮忙看看学校内站点发文章时为什么文章保存后自动被截取一部分:一张很长的表格,复制到富文本编辑器中后,点击“发布文章”后查看(过程没有出现执行错误),只出现了部分内容。
操作
检查后发现CMS的数据库(用的是MySQL),其保存文章的字段Content的类型是TEXT。
关于TEXT一类相关的属性对比如下 资料来源:
类型 | 范围 | 说明 |
Char(N) [binary] | N=1~255 个字元 。binary :分辨大小写 | 固定长度 |
VarChar(N) [binary] | N=1~255 个字元 。binary :分辨大小写 | 可变长度 |
TinyBlob | 最大长度255个字元(2^8-1) | Blob (Binary large objects)储存二进制资料,且有分大小写 |
TinyText | 最大长度255个字元(2^8-1) | Blob (Binary large objects)储存二进制资料,且有分大小写 |
Text | 最大长度65535个字元(2^16-1) | Blob (Binary large objects)储存二进制资料,且有分大小写 |
MediumBlob | 最大长度 16777215 个字元(2^24-1) | Blob (Binary large objects)储存二进制资料,且有分大小写 |
MediumText | 最大长度 16777215 个字元(2^24-1 | Blob (Binary large objects)储存二进制资料,且有分大小写 |
LongBlob | 最大长度4294967295个字元 (2^32-1) | Blob (Binary large objects)储存二进制资料,且有分大小写 |
LongText | 最大长度4294967295个字元 (2^32-1) | Blob (Binary large objects)储存二进制资料,且有分大小写 |
解决
将Content的类型改为MediumText(或以上级别)后功能执行正常。
讨论
由于学校内CMS用的一般都是富文本编辑器,存储在数据库中时还会保存成HTML格式的文本,其中一般含有大量的HTML标记,因此存储在Content字段中的字数要远超其显示的字符数。因此上述老师保存一段长表格,会被截取。
然而:
- MySQL在执行这个某个字段的值会被截断的插入/更新语句时不会提示错误(我在Console中测试过,没有错误反馈)。
- 感觉不仅时学校内使用的CMS,很多CMS站点中关于Conetent的字段类型也都是TEXT类型的。
- 如果错误,欢迎指正