我一直在开发启用了MySQL严格模式的网站。一个人在我们的日志表中记录了一个很长的用户代理字符串,不幸的是,用户代理字符串超出了列的限制,因此引发了警告。根本没有插入数据。
为了避免这样的麻烦,我应该禁用MySQL严格模式还是应该自己想出一些东西(我使用的是PHP)?
答案 0 :(得分:9)
在将数据插入数据库之前验证数据。如果字符串太大而无法放入表中,则列太窄或数据无效。您需要决定在存储它之前是否截断它,执行一些错误报告,或两者兼而有之。
不关闭DBMS的安全功能,这是完全错误的事情。
答案 1 :(得分:2)
您是希望以静默方式截断数据(可能导致数据损坏),还是至少想知道您遇到问题?
我建议启用严格模式并在PHP中检查数据。您的PHP应用程序知道或者至少应该知道如何处理太长的字符串。如果您关闭严格模式并将该决定留给MySQL,那么MySQL将默默地截断您的字符串,您将最终得到一个充满垃圾的数据库。
更改和修复代码很容易,修复损坏的数据通常是不可能的。
如果你禁用严格模式,你最终会遇到这样的奇怪问题:
答案 2 :(得分:1)
嗯,这取决于您在禁用严格模式的情况下尝试它,看看它是如何工作的,我从来没有遇到过禁用的问题,但要小心。
但是,如果长用户代理是严格模式的唯一问题,并且您没有在视觉上阅读它们,我建议只是哈希您的UA或增加字段长度。
答案 3 :(得分:0)
如果您需要这样做,则查询失败,并且您没有知识或预算来解决它-是的。
如果有人问这是如何正确禁用严格模式,只需将其添加到MySQL配置中即可:
sql_mode=NO_ENGINE_SUBSTITUTION
innodb_strict_mode=0