Вопрос по mysql – Почему MySQL позволяет обновить столбец NOT NULL до NULL?

6

Я бегуMySql вubuntu 10.10, Я создал таблицу под названием'employee' имея 3 имени поляempno, name and salary, Вставлено несколько объектов. В середине процесса я хочу изменить атрибут зарплаты как'NOT NULL', Я изменяю таблицу как

ALTER TABLE employee MODIFY salary int(10) NOT NULL;

Запрос выполнен. Я хотел проверить с помощью команды,

UPDATE employee SET salary=NULL;

Query OK, 15 rows affected, 15 warnings (0.06 sec)
Rows matched: 15  Changed: 15  Warnings: 15

также дал предупреждения" (Code 1048): Column 'salary' cannot be null "(Повторяется для каждого ряда)

Но когда я увидел свой стол, все зарплаты были нули ('0').

Same queries result in error instead of warning in WINDOWS XP's MySql

Я проверил в обоих двигателях INNODB и MYISAM, но тот же результат. Пожалуйста, помогите мне узнать, что произошло рядом с обработкой.

Какой у Вас вопрос? Вы устанавливаете свое поле наnot null и вы установите его в NULL. По умолчанию будет0 как ожидается. Что они делают в окнах по вашему мнению? Установка поля вNULL? Это было бы странно. Nanne
Вы можете отредактировать свой вопрос и показать вывод этой команды: show create table employee; jcho360
@Nanne и @ Quassnoi В окнах не разрешается обновлять нулевые значения и отображаются исходные зарплаты, но здесь отображаются все нули. Да, это может быть странно, но для меня результаты были неожиданными. :) kik
Что вы использовали для выполнения запроса, просто клиент командной строки mysql? Что вы имеете в виду "это не разрешает"? Вы получаете сообщение об ошибке вместо предупреждения? Nanne
Что именно вы подразумеваете под "хорошо работать вXP& Quot ;? Quassnoi

Ваш Ответ

2   ответа
3

NOT NULL, (который не допускает значения NULL), и теперь он не позволит установить его наNULL, что было бы ожидаемым поведением.

Причина, по которой у вас 0 в вашей БД, заключается в том, что 0 будет результатом приведения NULL к int.

Результат кастингаNULL дляINT этоNULL.
+1 уточнил почти. Но почему он не выполняет то же самое в Windows? почему он дает нули в UBUNTU? :) kik
Я думаю, что Кассной прибил это :)
12

SQL_MODE установить строгую на вас установку Ubuntu.

вопрос

SET SQL_MODE='STRICT_ALL_TABLES'

или добавить

SQL_MODE='STRICT_ALL_TABLES'

под[mysqld] на вашmy.cnf наUbuntu.

+1 Это было круто. :) но где я взял файл my.cnf в Ubuntu? kik
/etc/mysql/my.cnf Я верю, но тебе лучше проверить.
Это был правильный путь, но говорится, что "не удалось сохранить файл в /etc/mysql/my.cnf. Сохранить под другим именем? & Quot; kik
@ kik: это не редактируется, как вы можете понять. Запустите редактор подsudo.

Похожие вопросы