2015-05-02 5 views
1

, как я вижу, где каждый, даже здесь:Неверное значение по умолчанию тип ENUM Mysql

Из инструкции MySQL:

Если столбец ENUM объявлен разрешить NULL, значение NULL является правовой значение для столбца, а значение по умолчанию - NULL. Если столбец ENUM объявлен NOT NULL, его значением по умолчанию является первый элемент список допустимых значений.

Но в моей базе данных нету этого !!!! Зачем ?

это одна из структуры поля:

`dead` enum('0','1') NOT NULL DEFAULT '0'; 

но почему все данные в мертвой поле равно нулю ???

и если я выбрал этот тип, чтобы ввести значение, это будет список:

()Empty 
(0) 
(1) 

Почему всегда нуль есть?

и другое дело, когда я использую запрос, как это:

UPDATE TABLE SET dead = 0 -> result : dead = null 
UPDATE TABLE SET dead = 1 -> result : dead = 0 
UPDATE TABLE SET dead = 2 -> result : dead = 1 

С наилучшими пожеланиями.

+0

Звучит так, как будто вы «думаете», что вы объявили его нулевым, но ваш модификация для этого не удалась.Повторите попытку «изменить свою таблицу, изменив мертвое перечисление (« 0 »,« 1 »), а не« 0 »,« 0 »« – avk

+0

@avk ALTER TABLE test CHANGE 'dead'' dead' ENUM ('0', '1') NOT NULL ; все еще не работает, и нуль тоже есть и действует как первый элемент. –

+0

Можете ли вы показать результат 'SHOW CREATE TABLE test'? – infomaniac

ответ

0

Непонятно, о чем вы просите.

Вот скрипка: http://sqlfiddle.com/#!9/8b24d0/1

Как мы можем видеть, когда dead не установлен в INSERT запросе:

insert into table1 (id) values (4); 

MySQL поставить там ваше значение по умолчанию '0' и это то, что вы ожидали, я думаю.

Я не знаю, какую версию MySQL вы используете, но в моей скрипке, ясно, что MySQL не позволяет:

UPDATE table1 SET dead = 0; 

Поскольку это перечисление, он позволяет только:

UPDATE table1 SET dead = '0'; 

И это правильное и ожидаемое поведение, так как вы выбираете тип ENUM для столбца. Поэтому я не могу воспроизвести описанное в поведении OP. Если кто-нибудь еще может?

GUESS Я предполагаю, что вы пытаетесь преобразовать существующий столбец таблицы с существующими данными в этот столбец и застряли. Таким образом, для запуска изменить таблицу следует исправить данные первого, как:

UPDATE table1 SET dead='0' WHERE dead IS NULL; 

Поэтому, как только вы получите данные фиксированной вы можете попробовать ALTER TABLE установить DEFAULT.

+0

Спасибо за помощь. да в скрипке просто отлично, но не в mysql. my mysql ver: Тип сервера: MySQL Версия сервера: 5.6.17 - Сервер сообщества MySQL (GPL). когда я устанавливаю запрос: UPDATE table1 SET dead = '' WHERE id = 1; он установит 'dead' в значение null –

+0

, так как я много ищу, я вижу это: http://dev.mysql.com/doc/refman/5.6/en/enum.html он говорит => значение индекса пустого Строковое значение ошибки равно 0. Но один из моих опций - 0! Как я могу это сделать ? другой тип данных, такой как ENUM, я могу использовать для выбора только доступного значения поля? –

+0

попытайтесь расколоть ваш запрос 'UPDATE table1 SET dead = '' WHERE id = 1;' http://sqlfiddle.com/#!9/877f3/1 он не приносит нулевого значения. он приносит ошибку – Alex

Смежные вопросы