mikolas
28.03.2007 - 11:12
При переходе на 5-й MySQL всплыл неприятный момент.
Есть запрос типа REPLACE table SET id='new', name='name' он используется в форме редактирования или добавления новых записей. То есть если создаем запись то в колонку id вставляем неверное значение new, если редактируем - то соотвественно передаем нужный АйДишник.
Так вот 4-й мускул обрабатывал такой запрос и автозаменял ID своим авто инкрементом. 5-й же выдает ошибку типа id должно быть цифровым и все тут...
Встал вопрос. Это была фича 4-го мускула, или это баг 5-го?
з.ы. вместо REPLACE можно использовать INSERT, с неформатным ID. Так же в 5-м всплывает ошибка.
KnyazIVK
28.03.2007 - 15:17
У меня аналогичная проблема! кто-нибудь знает решение?
Если я правильно понял: Вытаскивается таблица из базы, надо обновить колонку name, но по идее этот name вытаскивается по идентификатору, соответственно надо обновить полностью все данные из таблицы. Код UPDATE $tbl SET id=ID, name=NAME WHERE ...... и так далее Удачи P.S. http://mysql.org
mikolas
29.03.2007 - 11:48
Неее, Может я не так сформулировал...
Смысл в том что 4-й мускул не ругался если я в цифровую колонку вставлял текстовую строку. Он её заменял на 0. 5-й MySQL ругается и не выполняет запрос.
В случае когда я пытался сделать REPLACE и указывал в качестве идентификатора заведомо несуществующий ID - он создавал новую строку с уникальным ID. Заведомо несуществующим, в данным случае, может быть только текстовая строка.
p.s. UPDATE не может быть использован, потому как данные не только обновляются но и при необходимость создаются.
Значит я не понял.
Выход, по крайней мере я так реализовывал у себя, таков:
В качестве решения можно сделать так. Создать три запроса 1. на вставку новой записи 2. на обновление записи 3. на удаление
Вопрос еще: а что у вас за поле в ID, в name понятно - TEXT или LONGTEXT. ID по идее должен быть INT с автоинкрементом, как у вас?
P.S. Может мы о разных вещах говорим? Я не понимаю зачем ID делать буквенным
The Undertaker
30.03.2007 - 13:34
открой конфиг мускула и найди там строку sql-mode, удали из нее параметр STRICT_TRANS_TABLES и заработает
А если у него нет к конфигу доступа?
MadCoder
7.04.2007 - 12:09
Цитата REPLACE table SET id='new', name='name' Я думаю, что это в корне неверно - вообще пытаться подсунуть значение туда, где MySQL сам должен ставить автоинкремент. А тем более пихать туда данные несоответствующего типа. Как нам говорила когда-то учитель математики: "Не умножайте сапоги на пряники..." INSERT INTO table (name) values('name');
..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
|