ERROR 1406 (22001): Data too long for column
发生错误是因为输入数据对于数据库表中的列来说太长了。
例如,如果我们使用 varchar(100) 定义列宽,并且数据长度超过 100 个字符,则会出现错误:
ERROR 1406 (22001): Data too long for column
当脚本尝试在位列中插入字符串时,也会发生此错误。
例如,开发人员可能不小心写了 '1' 而不是 1 — 在插入位值时,不应引用该值,因为这会导致 MySQL 将其视为字符串而不是位。
单个字符可能有 8 位长,而单个位只有 1 位长,因此会触发错误 Data too long for column。
解决方案
要解决这个问题,在提交之前应该确保数据没有超过数据库表中的列宽。
这可以通过 strlen 和 substr 的组合来完成
//If the data is longer than the column width, it is violently cut off! $user_agent ?? $_SERVER['HTTP_USER_AGENT']; if (strlen($user_agent) > 255) { $user_agent = substr($user_agent,0,255); }
我们还可以增加varchar列的宽度;为了将宽度增加到 500 个字符,我们可以执行以下 SQL 查询:
alter table request_log modify column user_agent varchar(500);
当我们试图插入比列宽长的数据时,会出现下面的错误:
MySQL ERROR 1406: Data too long for column ERROR 1406 (22001): 列的数据太长
这个问题至少有几个解决方案。
我们可以对数据进行截断,将超出列边界的数据截断;然而,这并不理想,因为它可能导致数据丢失和数据损坏,并且它没有非常有效地处理问题的根本原因,它只是将问题移到了视野之外。
那么,我们能做些什么呢?
假设我们可以访问 PHP 代码,我们很可能应该在将数据提交到数据库之前验证数据长度。
这样做将确保数据对于列来说永远不会太长。
我们还可以使列本身更长,以便将更多数据放入列中,这可以通过更改表查询来完成:
alter table request_log modify column user_agent varchar(500);
varchar 列的最大大小为 65.535 个字符。
日期:2020-06-02 22:17:09 来源:oir作者:oir