1

среды:Синхронизация модели изменяет БЕЗЗНАКОВЫЙ BIGINT беззнаковое BIGINT (19)

  • Ubuntu 14,04
  • MySql Workbench 6.2.4
  • MariaDB 10

Когда я пытаюсь синхронизировать модель со схемой базы данных, и у меня есть таблица определенного типа UNSIGNED BIGINT (то есть UNSIGNED BIGINT (20)), тогда она становится UNSIGNED BIGINT (19).

Тот же процесс с форвардной инженерией отлично подходит для этих типов данных.

Модель

model

Synchronizing модель

Synchronizing model

CREATE TABLE IF NOT EXISTS `test`.`table` (
    `id` BIGINT(19) UNSIGNED NOT NULL, 
    PRIMARY KEY (`id`)) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_general_ci; 

Форвард инжиниринг

forward engineering

CREATE TABLE IF NOT EXISTS `test.`table1` (
`id` BIGINT UNSIGNED NOT NULL, 
PRIMARY KEY(`id`)) 
ENGINE = InnoDB; 

Может быть ошибка в MySql Workbench?

ответ

0

Решение, которое я нашел, чтобы определить де типа, как

UNSIGNED BIGINT(20) --OK 

вместо

UNSIGNED BIGINT --KO 

MySql bug


На практике это, кажется, не влияет, как мы можем видеть, в примере Пример

create table test.biginttest (a BIGINT, b BIGINT(10), c BIGINT(15) ZEROFILL); 

INSERT INTO test.biginttest VALUES (-10,10,-10); 

INSERT INTO test.biginttest VALUES (9223372036854775808,9223372036854775808,9223372036854775808); 

select * from test.biginttest; 

Результат

enter image description here

1

(19) вещи, как на конце BIGINT (и других INTs) ничего не значит. Неважно, присутствует ли оно или нет. Не имеет значения и число; то есть (20) в порядке, тоже.

Все вкусы будут компилироваться и выполняться одинаково.

+0

Единственное отличие состоит в том, что он может сэкономить только 19 цифр вместо 20 – Joe

+0

№. «BIGINT» _always_ имеет место для 64 бит, одним из которых может быть знак ('SIGNED', по умолчанию, по сравнению с' UNSIGNED '). Если вы также говорите 'ZEROFILL', то' (n) 'говорит 'набирает вывод с цифрами' 0s' на 'n'. (Это очень редко используемая функция.) –

+0

Аналогично, 'INT' всегда имеет место для 32 бит (' SIGNED': +/- 2 billion; 'UNSIGNED': от 0 до 4 миллиардов - обычно более чем достаточно для' id'). 32 бит = 4 байта, половина размера 'BIGINT'. –