2010-07-15 27 views
1

首先,我知道这应该不工作。我们使用了一个非常古老的DAL/ORM(基于Pear/DB/GenericDao)层,它错误地推测该id不是自动增量/整数字段。升级MySQL 5.0 Linux - > MySQL 5.1 Windows和现在查询不起作用

此声明是否适用于5.0 Linux,不适用于5.1 Windows。有没有可能在我的ini中有不同的设置(ignore_type_errors =“yes”:))?我真的不希望在服务器升级任务中添加重写/升级此DAL/ORM(使我在该公司之前)。

声明

INSERT INTO Party SET partyTypeID = 'PERSON',id = '',comment = ''; 

错误

Error Code: 1366 
Incorrect integer value: '' for column 'id' at row 1) 

DDL的表

CREATE TABLE `Party` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `partyTypeID` varchar(32) NOT NULL DEFAULT '', 
    `comment` varchar(255) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`), 
    KEY `partyTypeID` (`partyTypeID`) 
) ENGINE=MyISAM AUTO_INCREMENT=1017793 DEFAULT CHARSET=latin1; 
+0

任何特定的SQL模式? (运行'show variables like'sql_mode''); – nos 2010-07-15 17:19:59

回答

4

你可能在5.1采用了更为严格的SQL_MODE比你使用5.0,从而有什么用成为警告现在是一个错误。

你使用了什么SQL_MODE?

SELECT @@GLOBAL.sql_mode; 

下面是一个例子来说明如何摆脱错误的:

mysql> set sql_mode = 'STRICT_TRANS_TABLES'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> INSERT INTO Party SET partyTypeID = 'PERSON',id = '',comment = ''; 
ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1 
mysql> set sql_mode = ''; 
Query OK, 0 rows affected (0.00 sec) 

mysql> INSERT INTO Party SET partyTypeID = 'PERSON',id = '',comment = ''; 
Query OK, 1 row affected, 1 warning (0.00 sec) 

mysql> show warnings; 
+---------+------+------------------------------------------------------+ 
| Level | Code | Message            | 
+---------+------+------------------------------------------------------+ 
| Warning | 1366 | Incorrect integer value: '' for column 'id' at row 1 | 
+---------+------+------------------------------------------------------+ 
1 row in set (0.00 sec) 
+0

就是这样!非常感谢!我有点惊讶,你实际上可以关闭类型检查。 – evilknot 2010-07-15 17:53:51