Php 升级MySQL 5.0 Linux->;MySQL 5.1 Windows和now query不';行不通

Php 升级MySQL 5.0 Linux->;MySQL 5.1 Windows和now query不';行不通,php,sql,mysql,pear,Php,Sql,Mysql,Pear,首先,我知道这不应该起作用。我们使用的是一个非常旧的DAL/ORM(基于Pear/DB/GenericDao)层,它错误地推测id不是一个自动递增/整数字段 此语句在5.0 Linux中有效,在5.1 Windows中无效。在我的ini中是否有可能不同的设置(ignore_type_errors=“yes”):?我真的不想在服务器升级任务中添加重写/升级这个DAL/ORM(它比我在公司的时间早) 声明 INSERT INTO Party SET partyTypeID = 'PERSON',id

首先,我知道这不应该起作用。我们使用的是一个非常旧的DAL/ORM(基于Pear/DB/GenericDao)层,它错误地推测id不是一个自动递增/整数字段

此语句在5.0 Linux中有效,在5.1 Windows中无效。在我的ini中是否有可能不同的设置(ignore_type_errors=“yes”):?我真的不想在服务器升级任务中添加重写/升级这个DAL/ORM(它比我在公司的时间早)

声明

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

表的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;

在5.1中使用的SQL_模式可能比在5.0中使用的更严格,因此以前的警告现在变成了错误

您使用的是什么SQL_模式

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)

在5.1中使用的SQL_模式可能比在5.0中使用的更严格,因此以前的警告现在变成了错误

您使用的是什么SQL_模式

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)

是否设置了任何特定的SQL模式?(运行
显示变量,如'sql_mode'
);是否设置了任何特定的SQL模式?(运行
显示变量,如'sql_mode'
);就这样!非常感谢!我有点惊讶,你居然可以关闭类型检查。就是这样!非常感谢!我有点惊讶,你居然可以关闭类型检查。