Mysql 同步模型会将UNSIGNED BIGINT修改为UNSIGNED BIGINT(19)

Mysql 同步模型会将UNSIGNED BIGINT修改为UNSIGNED BIGINT(19),mysql,mysql-workbench,mariadb,synchronize,forward-engineer,Mysql,Mysql Workbench,Mariadb,Synchronize,Forward Engineer,环境: Ubuntu 14.04 MySql工作台6.2.4 马里亚布10 当我尝试将模型与数据库模式同步,并且在表中定义了类型UNSIGNED BIGINT(即UNSIGNED BIGINT(20))时,它就变成UNSIGNED BIGINT(19) 正向工程的相同过程适用于这些数据类型 型号 同步模型 前沿工程 这可能是MySql Workbench中的一个bug吗?我找到的解决方案是定义de-type,比如 UNSIGNED BIGINT(20) --OK 而不是 UNSIGN

环境:

  • Ubuntu 14.04
  • MySql工作台6.2.4
  • 马里亚布10
当我尝试将模型与数据库模式同步,并且在表中定义了类型UNSIGNED BIGINT(即UNSIGNED BIGINT(20))时,它就变成UNSIGNED BIGINT(19)

正向工程的相同过程适用于这些数据类型

型号

同步模型

前沿工程


这可能是MySql Workbench中的一个bug吗?

我找到的解决方案是定义de-type,比如

UNSIGNED BIGINT(20) --OK
而不是

UNSIGNED BIGINT  --KO
MySql


实际上,正如我们在示例中看到的那样,它似乎不会产生影响 示例

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;
结果

(19)
BIGINT
(和其他
int
)末尾的
(19)
)之类的东西毫无意义。它是否存在并不重要。数字也不重要;也就是说,
(20)
也可以


所有版本的编译和执行都是相同的。

唯一的区别是它只能保存19位数字,而不是20位数字。
BIGINT
总是可以容纳64位,其中一位可能是符号(
SIGNED
,默认值,而不是
UNSIGNED
)。如果你也说
ZEROFILL
,那么
(n)
会说“用
0s
填充输出到
n
位。(这是一个很少使用的功能。)同样
INT
总是有32位的空间(
SIGNED
:+/-20亿;
UNSIGNED
:0到40亿——通常对于
id
)来说已经足够了。32位=4字节,是
BIGINT
的一半。我明白你的意思,那么M在这里BIGINT[(M)]的目标是什么?把M去掉不是更容易吗?唯一的用法是
(M)
是指如果您同时说
ZEROFILL
。否则,它既没有好处,也没有坏处。
SHOW CREATE TABLE
,而且(显然)您的同步工具会在您没有提供数字的情况下创建一个数字;这会增加混淆。删除它是“不必要的努力”,除非它会在同步过程中造成麻烦。
UNSIGNED BIGINT  --KO
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;