Обновлен MySQL 5.0 Linux -> MySQL 5.1 Windows, и теперь запрос не работает - PullRequest
1 голос
/ 15 июля 2010

Прежде всего, я знаю, что это НЕ ДОЛЖНО работать. Мы используем очень старый слой DAL / ORM (на основе Pear / DB / GenericDao), который неверно предполагает, что id не является автоинкрементным / целочисленным полем.

Это утверждение работает в Linux 5.0, НЕ работает в Windows 5.1. Есть ли настройки, которые могут отличаться в моем ini (ignore_type_errors = "yes" :))? Я действительно не хочу добавлять переписывание / обновление этого DAL / ORM (что предшествовало мне в компании) к задачам обновления сервера.

Заявление

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

Error

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;

1 Ответ

4 голосов
/ 15 июля 2010

Возможно, вы используете более строгий SQL_MODE в 5.1, чем в 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)
...