• mysql 解决 timestamp 的2038问题


    当 timestamp 存储的时间大于 '2038-01-19 03:14:07' UTC,mysql就会报错,
    因为这是 mysql自身的问题,也就是说 timestamp是有上限的,超过了,自然会报错,
    具体原因查看官方文档:https://dev.mysql.com/doc/refman/8.0/en/datetime.html,部分截图如下:


    timestamp 虽然有上限限制,但是它保存的是时间戳,可以不用去考虑时区的问题,如果是需要处理与时区相关的需求,
    解决 2038 限制的时候,建议将 timestamp改为整数类型,用来保存时间戳,在程序中再进行转换(这个方案没有实施过,仅仅是建议,慎用!!)

    如果不需要考虑时区问题,直接用 datatime类型替换 timestamp即可,因为datatime的取值范围大很多,可看上图;

    替换的思路:
            1. 修改原来字段的名字;

    ALTER TABLE `student` CHANGE `entry_date` `temp_entry_date` timestamp NOT NULL default '0000-00-00 00:00:00';

            2. 新建一个 datatime类型的字段(新建一列,用来替换原来的);

    ALTER TABLE `student` ADD `entry_date` DATETIME NOT NULL default '0000-00-00 00:00:00';

            3. 将原来字段列的数据拷贝到新的字段列中;

    UPDATE `student` SET `entry_date` = `temp_entry_date`;

            4. 删除原来的列;

    ALTER TABLE `student` DROP `temp_entry_date`;

    完整sql 如下:(需要注意,原来的 timestamp的默认值,这个也需要加上)

    ALTER TABLE `student` CHANGE `entry_date` `temp_entry_date` timestamp NOT NULL default '0000-00-00 00:00:00';
    ALTER TABLE `student` ADD `entry_date` DATETIME NOT NULL default '0000-00-00 00:00:00';
    UPDATE `student` SET `entry_date` = `temp_entry_date`;
    ALTER TABLE `student` DROP `temp_entry_date`;

    参考:https://code-examples.net/zh-CN/q/1eb5ad

  • 相关阅读:
    Linux虚拟内存管理(glibc)
    linux kernel内存回收机制
    Linux的Cache Memory(缓存内存)机制
    imx6用文件io操作gpio
    imx6中iomux IO复用
    start with git
    Linux进程的虚拟内存区域划分
    关于函数返回值为指针类型的分析
    对LCD接口的认识
    LCD屏背光驱动调试心得---血的教训
  • 原文地址:https://www.cnblogs.com/tommy-huang/p/9365128.html
Copyright © 2020-2023  润新知