2010-07-15 28 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