7

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

我想知道以下内容:

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

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

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

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

4

3 回答 3

3

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

SHOW WARNINGS;
Data truncated for foo ..

需要明确的是:数据被保存,但您丢失太大的部分。

于 2012-09-13T21:09:11.190 回答
1

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

如果你想要一个阻塞错误,你必须将 sql_mode 设置为STRICT_ALL_TABLES

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

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

希望这可以帮助

于 2012-09-13T21:10:56.190 回答
0

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

即使 MySQL 确实阻止添加行,它也不是限制用户可以输入的数据长度的好方法。您应该检查 PHP 中 POSTed 字符串的长度,如果它太长,则根本不运行查询 - 并且可能告诉用户为什么没有输入他们的数据。

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

于 2012-09-13T21:10:26.250 回答