Какой тип данных для хранения только 0, 1, -1 значения?

StackOverflow https://stackoverflow.com/questions/19848302

Вопрос

Я попытался создать поле как TINYINT(1), NOT NULL и DEFAULT ценность -1 Чтобы указать «неизвестно», но я получил эту ошибку от своего клиента:

Изменение ошибки Mytable: У вас есть ошибка в вашем синтаксисе SQL; Проверьте руководство, которое соответствует вашей версии MySQL Server для правильного синтаксиса для использования рядом с 'в строке 1

Я также попытался сделать длину 2 и получил то же сообщение

Угадывает TINYINT Разве правильный тип данных для такого рода обозначения, но что?

РЕДАКТИРОВАТЬ: Я получил его работу после прочтения комментария Эда Коттрелла. Я думаю, что где -то был дополнительный персонаж, вот было утверждение, которое сгенерировал мой клиент (с использованием запроса для Mac):

ALTER TABLE `DBName`.`MyTable`
CHANGE COLUMN `MyColumn` `MyColumn` TINYINT(1) NOT NULL DEFAULT -1  COMMENT ''
AFTER `MyOtherColumn`;

Заметил это COMMENT там и убедились, что все было чистым.

Другие комментарии и ответы были оценены; Я решил позволить NULL среднее неизвестно в этом случае

Это было полезно?

Решение

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

field bit(1) default NULL,

Кажется странным объявить поле not null а затем иметь особую ценность, которая, по сути, означает NULL.

РЕДАКТИРОВАТЬ:

Следующий синтаксис «работает» на SQL Fiddle:

create table t (
  val int,
  flag tinyint(1) default -1
 );

«Работа» находится в кавычках, потому что значение по умолчанию печатается как «1», а не «-1»-в конце концов, (1) Говорят просто напечатать одну цифру.

Возможно, в некоторых более ранних версиях MySQL это генерирует ошибку, когда видит, что -1 не будет отображаться правильно. (Если честно, это удивило бы меня.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top