MySQL TINYINT как неподписанный

Я попытался написать t=t|128, но получил ошибку вне допустимого диапазона. Я подозреваю, что tinyint подписан.

Однако http://dev.mysql.com/doc/refman/5.5/en/numeric-types.html говорит, что он может быть без знака (ниже). Но не сказано, как сделать его неподписанным. Как я?

Type     Storage    Minimum Value        Maximum Value
         (Bytes)    (Signed/Unsigned)   (Signed/Unsigned)
TINYINT     1           -128                    127
                          0                     255
SMALLINT    2          -32768                   32767
                          0                     65535
MEDIUMINT   3          -8388608                8388607
                          0                   16777215
INT         4         -2147483648            2147483647
                          0                  4294967295
BIGINT      8      -9223372036854775808  9223372036854775807
                          0             18446744073709551615

person Community    schedule 10.10.2012    source источник


Ответы (3)


UNSIGNED — это атрибут, который можно добавить ко многим типам. Из документации:

тип_данных:

    BIT[(length)]
  | TINYINT[(length)] [UNSIGNED] [ZEROFILL]
  | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
  | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
  | INT[(length)] [UNSIGNED] [ZEROFILL]
  | INTEGER[(length)] [UNSIGNED] [ZEROFILL]
  | BIGINT[(length)] [UNSIGNED] [ZEROFILL]
  | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
  | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
  | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
  | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]
  | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]
  | DATE
  | TIME
  | TIMESTAMP
  | DATETIME
  | YEAR
  | CHAR[(length)]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | VARCHAR(length)
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | BINARY[(length)]
  | VARBINARY(length)
  | TINYBLOB
  | BLOB
  | MEDIUMBLOB
  | LONGBLOB
  | TINYTEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | TEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | MEDIUMTEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | LONGTEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | ENUM(value1,value2,value3,...)
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | SET(value1,value2,value3,...)
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | spatial_type
person wallyk    schedule 10.10.2012

Вы помечаете неподписанные ключевым словом unsigned. Итак, при составлении таблицы для примера:

CREATE TABLE `example_table` (
  `example_col` tinyint(3) unsigned NOT NULL
);

Дополнительную информацию см. в разделе Создать таблицу или Изменить таблицу.

person Grumpy    schedule 10.10.2012

Во-первых, вы должны что-то сделать с отрицательными значениями, иначе ALTER TABLE...UNSIGNED выдаст ошибку. Например, вы можете увеличить все значения -

UPDATE table SET tiny_field = tiny_field + 128;

Затем используйте ALTER TABLE, чтобы изменить тип/параметр поля.

person Devart    schedule 10.10.2012
comment
У вас должно быть предложение where tiny_field‹0 на этом - person Seth Caldwell; 19.12.2018