php – 插入时自动截断数据
我的MySQL服务器(在Windows 2008 Server上通过PDO运行PHP)在插入超过列中允许的字符串时返回错误代码1406(字段数据太长).事情是我在某处读到MysqL通常在严格模式下截断数据.我更改了my.ini中的sql_mode,这样即使在启动时它也不会进入严格模式(它当前是“”),但它仍然给我错误并回滚,因此数据丢失(截断是期望的网站行为). 我进入命令行并在较短的varchar字段中插入一个带有长字符串的插入,它会截断数据并保存,但它不是.当我将模式更改回strict时,它没有在命令行中截断(只有错误). 此外,我使网站输出当前的sql模式,包括全局和会话(@@ GLOBAL.sql_mode和@@ SESSION.sql_mode),它们都输出“”但只是不按预期工作. 有谁知道造成这种情况的原因和/或如何改变它? 我怀疑它可能与PDO启用的PDO :: ATTR_ERRMODE = PDO :: ERRMODE_EXCEPTION有关,但我已阅读并且找不到任何有用的信息(我不认为这绝对是解释,但是我只是把它放在那里,以便你尽可能多地了解这个问题). 非常感谢你 解决方法: 您不应该这样做 – 请不要将错误的数据存入您的数据库,并在插入之前在脚本中对其进行清理. 如果您不知道VARCHAR列的实际宽度或者不想在脚本中对其进行硬编码,则可以通过使用以下查询查询INFORMATION_SCHEMA table
(您可能希望将此限制为仅限于data_type =’varchar’). 这种方法的优点是它不会改变任何服务器配置,并且应该适用于任何其他数据库,而不仅仅是MysqL. 但是如果你坚持以不安全的方式做,你可以尝试暂时禁用严格模式:
之后,MysqL应该默默地修剪字符串.阅读更多here. (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |