当数据类型为bigint(8)时,mysql排序功能正常但是因为bigint(20)而失败

时间:2015-12-28 06:22:05

标签: mysql sorting biginteger

我使用一列来存储UNIX时间戳,以秒为单位(除以1000)。我发现bigint数据类型足以存储它。我用

创建了它
 ...
 createTimeStamp bigint,
 ...

然而,当我跑

show create table tablename

它创建了bigint(20)。在我的排序开始遇到问题之前我没有注意到它。然后我修改了模式,使其明确地使用bigint(8),如下所示:

alter table tablename modify createTimeStamp bigint(8)

并且排序功能很好。

我研究并发现bigint(20)与存储无关,仅用于填充空间显示。如果是这样,为什么使用bigint(20)时排序不起作用?

1 个答案:

答案 0 :(得分:1)

当使用超过64位的数字时,Mysql会提到错误。

http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

  

BIGINT [(M)] [UNSIGNED] [ZEROFILL]

     

一个大整数。签署的范围是-9223372036854775808到   9223372036854775807.无符号范围是0到18446744073709551615。        ...        ......

     

关于BIGINT列你应该注意的一些事情:

     

所有算术都是使用带符号的BIGINT或DOUBLE值完成的,所以你   不应该使用大于的无符号大整数   9223372036854775807(63位)除了位功能!如果你这样做   因为,结果中的一些最后数字可能是错误的   将BIGINT值转换为DOUBLE时的舍入错误。