我有一个日志(log)记录表,出于统计原因,它将包含数百万次写入.所有列都是int外键.我还将为每一行添加一个时间戳列.考虑到DATETIME需要8位,我将使用int(10) unsigned将存储空间(以及该列上的索引)减少一半.

然而,我想知道这个专栏什么时候不再有效了.2038年1月19日凌晨3:14:07,UNIX时间戳的值9999999999将是一个问题,但MySQL中的未签名int最多只能容纳4294967295,并且时间戳4294967295在我的PHP应用程序中显示了一个无效的数字.

So what does this mean? Is the end of the storing int timestamps in MySQL going to be sometime in 2021 since it can't make it all the way to 9999999999?

Answer:

  1. 2147483647是2038(不是99999999),所以没有问题.
  2. 不需要unsigned,因为2147483647适合签名的MySQL int.

推荐答案

标准UNIX时间戳是一个有符号的32位整数,在MySQL中是一个常规的"int"列.无法存储9999999999,因为这远远超出了表示范围——任何类型的32位int的最高值都是4294967295.goes中有符号32位的最高值为2147483647.

如果UNIX时间戳变为64位数据类型,则必须使用MySQL"bigint"来存储它们.

至于int(10)(10)部分仅用于显示目的.MySQL仍将在内部使用一个完整的32位来存储数字,但每当您在表上进行 Select 时,只显示10.

Mysql相关问答推荐

左联接重复问题

根据上一行S列结果计算列的查询

约会时的意外行为

为什么MySQL派生条件下推优化不起作用

根据日期重叠转换表格

DJANGO 使用原始 MYSQL 查询计算记录数并在 html 模板中使用结果

MySQL:获取连续记录的数量(日期)?

docker-compose:无法将应用程序服务连接到 mysql 数据库,收到错误:用户‘root’@‘localhost’访问被拒绝(使用密码:YES)

MySQL - 密码哈希没有预期的格式

为什么用PyMySQL构建的json返回结果会出现重复?

MySQL - 事务绑定多个存储过程调用和回滚的简单方法?

分别针对每个不同的列 Select 聚合

MySql查询无结果

为什么 ORDER BY 'id' 'desc' 不返回语法错误?

MySQL Group By 和 Sum 其他列的总值

Python MYSQL 更新语句

MYSQL:创建表中的索引关键字以及何时使用它

MySQL - 如何在 INSERT 语句中将字符串值解析为 DATETIME 格式?

将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是什么?

在 MYSQL 中按枚举字段排序