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
这可能是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;