2017-01-07 24 views
0

我有一些表在我的数据库与类型BIGINT列: enter image description here设定值在PHP低于0让0

的问题是,当我设置(通过更新或插入)值比0(对示例-2),然后在数据库中设置为0. enter image description here

有人知道为什么吗?

(我没有任何程序在插入/更新之前更改此值)。 Db是MySql

+1

你正在使用一个unsigned int,它不允许使用负数。您可以在这里阅读:https://msdn.microsoft.com/en-us/library/ms187745.aspx关于SQL中的bigint –

+0

的确如此。谢谢! – DarSta

回答

1

它看起来像你的数据库实际上使用的是一BIGINT UNSIGNED,其具有范围为0至18446744073709551615.而按照MySQL Reference Manual

当外的范围内的值被分配吨o整数列,MySQL存储表示列数据类型范围的相应端点的值。

这意味着试图存储在任何UNSIGNED列中的负数将返回到0。

为了解决这个问题,最好明确设置数据类型为BIGINT SIGNED

4

您可以阅读unsigned bigint和signed bigint之间的区别。 MySQL Bigint

无符号BIGINT值:0到18446744073709551615
而符号的BIGINT值:-9223372036854775808到9223372036854775807
所以,你必须使用符号的BIGINT

+0

太棒了!非常感谢。 – DarSta