2017-02-17 80 views
1

環境:同步模型修改UNSIGNED BIGINT爲UNSIGNED BIGINT(19)

  • 的Ubuntu 14.04
  • MySQL工作臺6.2.4
  • MariaDB的10

當我嘗試同步模型與數據庫模式和我有一個表定義類型UNSIGNED BIGINT(即UNSIGNED BIGINT(20)),然後它變成UNSIGNED BIGINT(19)。

正向工程的相同過程對這些數據類型正常工作。

型號

model

同步模式

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工作臺的錯誤嗎?

回答

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

編號A'BIGINT' _always_有64位的空間,其中一個可能是符號('SIGNED',默認值,'UNSIGNED ')。如果你還說'ZEROFILL',那麼'(n)'說「用'0s'填充輸出'n'數字(這是一個很少使用的功能。) –

+0

類似地,'INT'總是有32位的空間('SIGNED':+/- 20 billion;'UNSIGNED':0-40億 - 通常綽綽有餘''id')。 32位= 4字節,是'BIGINT'大小的一半。 –