2010-11-30 99 views
3

我有一个旧的应用程序,从MySQL 5.0升级到5.1后开始失败。如何强制MySQL使用TRADITIONAL模式?

一点研究表明这是由于“严格模式”,它可以防止插入某些类型的“无效”值,而这些值以前只是自动转换为合理的值。

我试过SET @@SESSION.sql_mode = ''SET @@GLOBAL.sql_mode = ''但我仍然得到错误。

还尝试在my.ini中注释掉sql_mode

有没有更强大的“核”选项来解决这个问题?

+3

这些*合理的*替换包括日期为'0000-00-00',外键为'0',ENUM字段中的空字符串...在我的经验中,这往往会使一切复杂化,因为像WHERE start_date IS NULL`不能按预期工作,你必须求助于`WHERE start_date IS NULL OR start_date ='0000-00-00'`。您应该使用适当的SQL模式修补您的生产环境,但是也会在开发框中实施严格的模式并尝试修复应用程序。 – 2010-11-30 10:55:53

回答

5

在我的应用程序通常是由每一个新的连接上发出

SET SESSION sql_mode = 'ANSI_QUOTES,TRADITIONAL' 

确保MySQL连接正在使用的传统模式。我认为,如果你只是问题

SET SESSION sql_mode = '' 

在每个新的连接,你将已经解决了这个问题。

您应该能够通过发行

SET GLOBAL sql_mode = '' 

更改新连接的默认SQL模式,但你必须使用一个帐户具有足够的权限来做到这一点,否则将无法正常工作。

我认为,如果您想确保特定的SQL模式正在运行您的应用程序,最可靠的方法是为每个新连接设置它。

+0

谢谢...显然我的问题是语法。 SET SESSION sql_mode工作,但SET @@ SESSION.sql_mode没有。也看起来像我必须把这个到每个存储过程。 – 2010-11-30 14:20:49

0

要允许无效的日期,你需要:

SET sql_mode = 'ALLOW_INVALID_DATES'; 

但你最好解决您的应用程序。