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

当数据类型为bigint(8)但作为bigint(20)失败时,mysql排序功能正常,mysql,sorting,biginteger,Mysql,Sorting,Biginteger,我使用一列存储UNIX时间戳,单位为秒(除以1000)。我发现bigint数据类型足够大,可以存储它。我用 ... createTimeStamp bigint, ... 但是我跑的时候, show create table tablename 它将其创建为bigint(20)。直到我的同类开始遇到问题,我才注意到这一点。然后,我修改了模式,使其显式为bigint(8),如中所示: alter table tablename modify createTimeStamp bigint(

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

 ...
 createTimeStamp bigint,
 ...
但是我跑的时候,

show create table tablename
它将其创建为bigint(20)。直到我的同类开始遇到问题,我才注意到这一点。然后,我修改了模式,使其显式为bigint(8),如中所示:

alter table tablename modify createTimeStamp bigint(8)
排序功能也很好


我研究并意识到bigint(20)与存储无关,只用于填充空格的显示。如果是这样,为什么在使用bigint(20)时排序不起作用

Mysql在使用超过64位的数字时暗指错误

BIGINT[(M)][无符号][零填充]

一个大整数。签名范围为-9223372036854775808到 9223372036854775807. 无符号范围为0到18446744073709551615。 ... ...

关于BIGINT列,您应该注意以下事项:

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


这不是我的问题。这个数字在这个范围内,我在得到一个整数后存储这个数字。我的意思是,我没有将浮点数传递给mysql以将其转换为int。此外,只有一个sql比较,如where子句中的一个
BIGINT\u column>somevalue
,使用BIGINT列的任何地方都不涉及表达式。问题不在于数据,而在于存储机制不合适,因为在使用BIGINT时使用双精度数字来存储值。。尝试在查询中附加一个排序方向,看看它是否有差异(.eg,“…ORDER BY myfield ASC”我用BIGINT(8)修复了它明确地说,没有问题。我之前也在使用asc/desc,但它并没有解决问题。您指出了正确的方向,因此我接受您的答案。@Sam,请问问题出在哪里?根据您提供的信息,目前还不清楚。@Michael-我在服务器端使用节点mysql模块,并在服务器上动态更新运行包含order by子句的查询字符串。其中一个表使用整数字段存储UNIX时间戳,但仅存储秒而不是毫秒。当我在此列上使用order by子句时,当该列存储为BIGINT(20)时,它不会正确排序,但在BIGINT(8)时会正确排序坦率地说,现在它可以工作了,而且因为我本来不应该使用默认的BIGINT(20),所以我停止了进一步的调试。