我应该禁用MySQL严格模式吗?

时间:2011-04-03 08:20:22

标签: php mysql strict-mode

我一直在开发启用了MySQL严格模式的网站。一个人在我们的日志表中记录了一个很长的用户代理字符串,不幸的是,用户代理字符串超出了列的限制,因此引发了警告。根本没有插入数据。

为了避免这样的麻烦,我应该禁用MySQL严格模式还是应该自己想出一些东西(我使用的是PHP)?

4 个答案:

答案 0 :(得分:9)

在将数据插入数据库之前验证数据。如果字符串太大而无法放入表中,则列太窄或数据无效。您需要决定在存储它之前是否截断它,执行一些错误报告,或两者兼而有之。

关闭DBMS的安全功能,这是完全错误的事情。

答案 1 :(得分:2)

您是希望以静默方式截断数据(可能导致数据损坏),还是至少想知道您遇到问题?

我建议启用严格模式并在PHP中检查数据。您的PHP应用程序知道或者至少应该知道如何处理太长的字符串。如果您关闭严格模式并将该决定留给MySQL,那么MySQL将默默地截断您的字符串,您将最终得到一个充满垃圾的数据库。

更改和修复代码很容易,修复损坏的数据通常是不可能的。

如果你禁用严格模式,你最终会遇到这样的奇怪问题:

  

VARCHAR(4) storing more characters than four

答案 2 :(得分:1)

嗯,这取决于您在禁用严格模式的情况下尝试它,看看它是如何工作的,我从来没有遇到过禁用的问题,但要小心。

但是,如果长用户代理是严格模式的唯一问题,并且您没有在视觉上阅读它们,我建议只是哈希您的UA或增加字段长度。

答案 3 :(得分:0)

如果您需要这样做,则查询失败,并且您没有知识或预算来解决它-是的。

如果有人问这是如何正确禁用严格模式,只需将其添加到MySQL配置中即可:

sql_mode=NO_ENGINE_SUBSTITUTION
innodb_strict_mode=0