Есть проблема при вставке пустой строки в числовое поле. Например, запрос в OsCommerce Код (Text): insert into whos_online (customer_id, full_name, session_id, ip_address, time_entry, time_last_click, last_page_url) values ('', 'Guest', '952701fe8136447b96d869658a4c2daf', '127.0.0.1', '1158263139', '1158263139', '/') выдает ошибку "Out of range value adjusted for column 'customer_id' at row 1" Если для поля customer_id подставить число или строку в виде числа (например, '7'), то запрос выполняется. Такие же проблемы есть и на форуме IPB. Можно ли с помощью настроек MySQL как-нибудь побороть эту беду? MySQL 5.0.22. На четвертом MySQL эти запросы проходили.
Это помогает. Но проекты не мои (osCommerce) и надо только поменять дизайн. А полдня вылавливать все неправильные запросы как-то не катит. Да, забыл структуру указать CREATE TABLE `whos_online` ( `customer_id` int(11) default NULL, `full_name` varchar(64) NOT NULL default '', `session_id` varchar(128) NOT NULL default '', `ip_address` varchar(15) NOT NULL default '', `time_entry` varchar(14) NOT NULL default '', `time_last_click` varchar(14) NOT NULL default '', `last_page_url` varchar(64) NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Тогда да, NULL... или вообще убрать из запросов поле customer_id и тогда NULL там будет ставится автоматически в любой версии MySQL...
Никак. То что пустая строка для целочисенного поля воспринималась старыми мускулями как NULL - недоработка... точнее, допущение. Хотя можешь создать триггер на insert и если customer_id = '' вставлять NULL... Но это тоже заплатка, как бы...
Опять двадцать пять. Править код не подходит. Спасибо за помощь, главное узнал что нельзя. P.S. У меня установлено два MySQL - 4-й и 5-й. Поэтому когда надо работать с osCommerce (а это бывает очень редко), я останавливаю пятый и запускаю четвертый. Просто хотел узнать можно ли как-нибудь уговорить пятый воспринимать пустые строки.
Я же сказал, можно - Создать в 5 мускуле триггер, срабатывающий на вставку в таблицу и смотреть, если всталяется пустая строка, то вставлять вместо нее NULL...
Пробежался по описанию триггеров. Все равно надо править код. А если попадется другой продукт с такой же бедой (например, форум IPB), опять нужно править. Если есть решение на уровне настроек MySQL, то подскажи. Что-то менять в коде не подходит.
Хм. Почитаю счас мануал по мускулю - я с триггерами плотно работал только в Oracle - может там что по другому...[/quote]
вроде, все правильно... тебе нуна сделать что то вроде PHP: CREATE TRIGGER space_check BEFORE INSERT ON whos_online FOR EACH ROW BEGIN IF NEW.customer_id = '' THEN SET NEW.customer_id = NULL; END IF; END;
Возращаясь к преобразованию. Триггеры вещь хорошая, Горбунов Олег спасибо большое за совет, но с пустыми строками почему-то не проходит. Если, например, в варианте Код (Text): CREATE TRIGGER space_check BEFORE INSERT ON whos_online FOR EACH ROW BEGIN IF NEW.customer_id = '' THEN SET NEW.customer_id = NULL; END IF; END; изменить условие на Код (Text): IF NEW.customer_id = '6' THEN SET NEW.customer_id = 7; END IF; то при вставке в поле customer_id значения 6, оно заменяется на 7. Но все таки есть решение на уровне настроек. Надо в конфигурационном файле для переменной sql-mode убрать STRICT_TRANS_TABLES.