我的 MySQL 服务器(在 Windows 2008 服务器上通过 PDO 使用 PHP 运行)在插入比列中允许的长度更长的字符串时返回错误代码 1406(字段数据太长)。问题是我在某处读到 MySQL 通常会在不处于严格模式时截断数据。我更改了 my.ini 中的 sql_mode,这样即使在启动时它也不会进入严格模式(当前是“”),但它仍然给我错误并回滚,所以数据丢失了(截断是所需的网站行为)。
我进入命令行并在较短的 varchar 字段中插入了一个长字符串,它确实截断了数据并保存了,但站点却没有。当我将模式改回严格时,它没有在命令行中截断(只有错误)。
此外,我让站点输出当前的 sql 模式,包括全局和会话(@@GLOBAL.sql_mode 和 @@SESSION.sql_mode),它们都输出“”,但不能按预期工作。
有谁知道是什么原因造成的和/或如何改变它?
我的怀疑是它可能与使用 PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION 启用的 PDO 有关,但我已阅读并找不到任何有用的信息(我真的不认为这绝对是解释,但是我只是把它放在那里,以便你尽可能多地了解这个问题)。
非常感谢你