试图将太多数据放入mysql TEXT数据类型

时间:2012-09-13 20:51:56

标签: mysql types sqldatatypes

假设我有一个html表单(实际上我有一个编辑器--TinyMCE),它通过PHP将一堆文本插入到Mysql表中。

我想知道以下内容:

如果我在Mysql列中有TINYTEXT数据类型 - 如果用户试图将超过255个字节的文本放入Mysql表中会发生什么?

应用程序是否保存前255个字节并“切断”其余部分?或者什么都没有保存到Mysql表中并且mysql发出警告?或者以上都没有?

实际上,我想要和打算做的是以下内容: 通过将Mysql中的列数据类型设置为TEXT数据类型来限制用户表单输入的大小,该数据类型最多可容纳64 KB的文本。我想限制从用户传递到数据库的文本量,以便用户不能一次向服务器放置太多数据。

所以,基本上,我想知道如果用户通过TinyMCE编辑器输入的文本多于65535字节,假设TEXT数据类型在mysql表中,会发生什么。

3 个答案:

答案 0 :(得分:3)

默认情况下,MySQL会在数据太长的情况下截断数据,并发送警告。

SHOW WARNINGS;
Data truncated for foo ..

为了清楚起见:数据保存,但缺少太大的部分。

答案 1 :(得分:1)

如果值大于最大表字段定义大小,则默认mysql配置会截断数据,这将产生非阻塞警告。

如果您想要阻止错误,则必须将sql_mode设置为STRICT_ALL_TABLES

dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_strict_all_tables

恕我直言,最好的方法是通过应用软件管理此错误。

希望这有帮助

答案 2 :(得分:0)

如果您向MySQL中的TEXT字段输入了太多数据,它将无论如何插入该行,但该字段被截断为最大长度,并发出警告。

即使MySQL确实阻止了添加行,也不是限制用户可以输入的数据长度的好方法。你应该检查PHP中POSTed字符串的长度,如果它太长就不要运行查询 - 也许告诉用户为什么没有输入数据。

除此之外,您还可以阻止用户在客户端输入太多字符(尽管您应该始终执行检查服务器端,因为有人可以绕过客户端限制)。似乎在TinyMCE中没有内置的方法,但可以通过编写回调来实现:Limit the number of character in tinyMCE