MySQL5, недобавляются данные

max_danilove

Новичок
MySQL5, недобавляются данные

В общем такой вопрос..
Есть таблица с несколькими полями, скажем id(int),row1(text),row2(text),row3(text). Если в версии 4 и ниже работать и вставлять данные через
INSERT INTO mytest(row1) VALUES('123')
то все ок, остальные row пустые, а id =0. Но в 5 версии БД, такое не пройдет, конкретно для row2,3 при томже запросе будет выдана ошибка Field 'row2' doesn't have a default value, т.е. говорит мол значение надо какое-нибудь, раз не указал, беру дефолтное а его тоже нету...
Подумал, подумал, может быстро в коде дописать запрос так:
INSERT INTO mytest(id,row1,row2,row3) VALUES(0,'123','','')
Но потом подумал, что в некоторых случаях инфа может затираться в полях, если будут редактироваться другие.
Потом подумал еще и решил прописать в структуре дефолтные значения, это тоже не выход, пустое не может быть(или я не знаю как задать это), в общем тоже ушло на провал.
Как быть в таком случае? Может это супер особенность новой версии БД?
 

Фанат

oncle terrible
Команда форума
Но потом подумал, что в некоторых случаях инфа может затираться в полях, если будут редактироваться другие.
и долго ты думал?
при чём тут редактирование?
 

svetasmirnova

маленький монстрик
Читай что такое sql_mode и выясняй зачем его дефолтное значение изменено в твоём случае.
 

max_danilove

Новичок
С версии 5.0.13 по умолчанию включен strict mode, который "ужесточается" с версиями.
 

svetasmirnova

маленький монстрик
Фанат
Не поняла вопроса.
max_danilove
Это где он по умолчанию включён?
 

svetasmirnova

маленький монстрик
Фанат
mysql> create table baz(row1 varchar(64), row2 varchar(64) not null) engine=innodb;
Query OK, 0 rows affected (0.36 sec)

mysql> SET @@sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into baz (row1) values('test1');
Query OK, 1 row affected, 1 warning (0.11 sec)

mysql> select * from baz;
+-------+------+
| row1 | row2 |
+-------+------+
| test1 | |
+-------+------+
1 row in set (0.00 sec)

mysql> SET @@sql_mode='STRICT_TRANS_TABLES';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@sql_mode;
+---------------------+
| @@sql_mode |
+---------------------+
| STRICT_TRANS_TABLES |
+---------------------+
1 row in set (0.00 sec)

mysql> insert into baz (row1) values('test2');
ERROR 1364 (HY000): Field 'row2' doesn't have a default value
mysql>
 

Фанат

oncle terrible
Команда форума
Подумал, подумал, может быстро в коде дописать запрос так:
INSERT INTO mytest(id,row1,row2,row3) VALUES(0,'123','','')


повторяю свой вопрос - зачем ему sql_mode?
 

Skubent

Новичок
Потом подумал еще и решил прописать в структуре дефолтные значения, это тоже не выход, пустое не может быть(или я не знаю как задать это), в общем тоже ушло на провал.
CREATE TABLE t1(`q` TEXT DEFAULT NULL)
CREATE TABLE t2(`q` TEXT DEFAULT '')

Что еще не может быть пустым ?
 

Лимур

Новичок
У меня была похожая проблема.
Все дело в
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
http://xpoint.ru/forums/programming/PHP/thread/37175.xhtml
Тебе об этом уже писали исправь и все заработает.
 
Сверху