Mysql的timestamp(时间戳)详解以及2038问题的解决方案

MySQL中的DATETIME和TIMESTAMP类型 在 MySQL 中,DATETIME和 TIMESTAMP都用于存储日期和时间信息,但它们在存储方式、范围和默认值等方面有一些重要的差异。 阅读详情
AI摘要

本文围绕MySQL时间戳类型展开,介绍了其数据存取、字段定义、使用差异、引发的异常等内容。对比了timestamp和datetime的异同,给出时间戳类型使用建议。还针对2038问题,提出用datetime类型替换timestamp的解决方案。

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本,由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,下面从几个方面来详细介绍时间戳数据类型。

时间戳数据存取

在MySQL上述三个大版本中,默认时间戳(Timestamp)类型的取值范围为’1970-01-01 00:00:01’ UTC 至’2038-01-19 03:14:07’ UTC,数据精确到秒级别,该取值范围包含约22亿个数值,因此在MySQL内部使用4个字节INT类型来存放时间戳数据:
1、在存储时间戳数据时,先将本地时区时间转换为UTC时区时间,再将UTC时区时间转换为INT格式的毫秒值(使用UNIX_TIMESTAMP函数),然后存放到数据库中。
2、在读取时间戳数据时,先将INT格式的毫秒值转换为UTC时区时间(使用FROM_UNIXTIME函数),然后再转换为本地时区时间,最后返回给客户端。

在MySQL 5.6.4及之后版本,可以将时间戳类型数据最高精确微秒(百万分之一秒),数据类型定义为timestamp(N),N取值范围为0-6,默认为0,如需要精确到毫秒则设置为Timestamp(3),如需要精确到微秒则设置为timestamp(6),数据精度提高的代价是其内部存储空间的变大,但仍未改变时间戳类型的最小和最大取值范围。

时间戳字段定义

时间戳字段定义主要影响两类操作:

  1. 插入记录时,时间戳字段包含DEFAULT CURRENT_TIMESTAMP,如插入记录时未指定具体时间数据则将该时间戳字段值设置为当前时间

  2. 更新记录时,时间戳字段包含ON UPDATE CURRENT_TIMESTAMP,如更新记录时未指定具体时间数据则将该时间戳字段值设置为当前时间

PS1:CURRENT_TIMESTAMP表示使用CURRENT_TIMESTAMP()函数来获取当前时间,类似于NOW()函数

根据上面两类操作,时间戳列可以有四张组合定义,其含义分别为:

  1. 当字段定义为timestamp,表示该字段在插入和更新时都不会自动设置为当前时间。

  2. 当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。

  3. 当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。

  4. 当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。

PS1:在MySQL中执行的建表语句和最终表创建语句会存在差异,建议使用SHOW CREATE TABLE TB_XXX获取已创建表的建表语句。

时间戳字段在MySQL各版本的使用差异

  1. 在MySQL 5.5及之前版本中,仅能对一个时间戳字段定义DEFUALT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP,但在MySQL 5.6和MySQL 5.7版本中取消了该限制;

  2. 在MySQL 5.6版本中参数explicit_defaults_for_timestamp默认值为1,在MySQL 5.7版本中参数explicit_defaults_for_timestamp默认值为0;

  3. 在MySQL 5.5和MySQL 5.7版本中timestamp类型默认为NOT NULL,在在MySQL 5.6版本中timestamp类型默认为NULL;

  4. 当建表语句中定于c1 timestamp 时,

  • 在MySQL 5.5中等价于c1 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

  • 在MySQL 5.6中等价于c1 timestamp NULL DEFAULT NULL;

  • 在MySQL 5.7中等价于c1 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

  1. 当建表语句中c1 timestamp default 0时,
  • 在MySQL 5.5中等价于c1 timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00’;
  • 在MySQL 5.6中等价于c1 timestamp NULL DEFAULT ‘0000-00-00 00:00:00’;
  • 在MySQL 5.7中等价于c1 timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00’;

PS1: MySQL 5.6版本和MySQL 5.7版本中主要差异受参数explicit_defaults_for_timestamp的默认值影响。

PS2:当时间戳列的默认值为’0000-00-00 00:00:00’时,使用“不在时间戳取值范围内”的该默认值并不会产生警告。

时间戳类型引发的异常

当MySQL参数time_zone=system时,查询timestamp字段会调用系统时区做时区转换,而由于系统时区存在全局锁问题,在多并发大数据量访问时会导致线程上下文频繁切换,CPU使用率暴涨,系统响应变慢设置假死。

时间戳类型和时间类型选择

在部分"数据库指导"文档中,会推荐使用timestamp类型代替datetime字段,其理由是timestamp类型使用4字节,而datetime字段使用8字节,但随着磁盘性能提升和内存成本降低,在实际生产环境中,使用timestamp类型并不会带来太多性能提升,反而可能因timestamp类型的定义和取值范围限制和影响业务使用。

在MySQL 5.6.4及之后版本,可以将时间戳类型(timestamp)数据最高精确微秒,也同样可以将时间类型(datetime)数据最高精确微秒,时间类型(datetime)同样可以获得timestamp类型相同的效果,如将字段定义为 dt1 DATETIME(3) NOT NULL DEFAULT NOW(3) ON UPDATE NOW(3); 时间类型(datetime)的存取范围’1000-01-01 00:00:00.000000’ 至 ‘9999-12-31 23:59:59.999999’,能更好地存放各时间段的数据。

时间戳类型使用建议

  1. 在只关心数据最后更新时间的情况下,建议将时间戳列定义为TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

  2. 在关心创建时间和更新时间的情况下,建议将更新时间设置为时间戳字段,将创建时间定义为DAETIME 或 TIMESTAMP DEFAULT ‘0000-00-00 00:00:00’,并在插入记录时显式指定创建时间;

  3. 建议在表中只定义单个时间戳列,并显式定义DEFAULT 和 ON UPDATE属性;

  4. 虽然在MySQL中可以对时间戳字段赋值或更新,但建议仅在必要的情况下对时间戳列进行显式插入和更新;

  5. 建议将time_zone参数设置为system外的值,如中国地区服务器设置为’+8:00’;

  6. 建议将MySQL线下测试版本和线上生产版本保持一致。

Timestamp和datetime的异同

参考链接:https://blog.youkuaiyun.com/z3278221/article/details/81000876

相同点:

  1. 可自动更新和初始化,默认显示格式相同YYYY-MM-dd HH:mm:ss

不同点:
2. timestamp的时间范围是:‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC ,自动时区转化,实际存储毫秒数,4字节存储
3. datetime的时间范围:‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’ ,不支持时区,8字节存储

设置timestamp和date的自动更新时间

当对某条数据进行更新操作时或者插入一条新的数据而没有对date和mydate进行赋值,date和mydate这两个字段会自动默认为当前时间
CREATE TABLE `mytime` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` timestamp(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  `mydate` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

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';
  1. 新建一个 datatime类型的字段(新建一列,用来替换原来的);
ALTER TABLE `student` ADD `entry_date` DATETIME NOT NULL default '0000-00-00 00:00:00';
  1. 将原来字段列的数据拷贝到新的字段列中;
UPDATE `student` SET `entry_date` = `temp_entry_date`;
  1. 删除原来的列;
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`;
不用到2038年,MySql的TIMESTAMP就能把我们系统搞崩 历史文章推荐: 细数ThreadLocal三大坑,内存泄露仅是小儿科 Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUG ConcurrentHashMap中有十个提升性能的细节,你都知道吗? HashMap面试,看这一篇就够了 七种方式教你在SpringBoot初始化时搞点事情 Java序列化的这三个坑千万要小心 MySql中常见的时间类型有三种DATE, DATETIME和 TIMESTAMP,其中DATE类型用于表示日期,但是不会包含时间,格式为YYYY-MM-DD,而. 阅读详情

相关推荐

Mysql-时间的存储 datetime还是时间戳timestamp?

c、然后mysql数据库接收到这个时间字符串2020-02-23080000后,由于数据库时区配置是东9区,它会认为这个时间是东9区的,它会以东9区解析这个时间字符串,这时数据库保存的时间是东9区的2020-02-23080000,也就是东8区的2020-02-23070000,保存的时间就偏差了1个小时。从上表可以看到,DATETIME默认占用5个字节,而TIMESTAMP默认占用4个字节,如果需要更高精度的存储(秒后的小数点个数,比如毫秒)那么需要额外的存储空间。......

S_ZaiJiangHu的博客 5554

Mysql中timestamp用法详解

Mysql中timestamp用法详解前言:时间戳(timestamp) 前言:时间戳(timestamp) 前言:时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面。 一、MySQL中表示当前时间的方法: CURRENT_TIMESTAM

hyfsx的博客 4万+

MySQL、PostgreSQL与MariaDB的2038年危机:数据库时间戳的终极挑战

本文深入剖析了MySQL、PostgreSQL与MariaDB三大主流数据库面临的2038年危机。该问题源于32位Unix时间戳在2038年1月19日溢出,可能导致服务崩溃或无法重启。文章对比了各数据库的具体表现,分析了技术根源,并提供了从数据类型迁移到系统升级的完整实战应对指南,帮助开发者提前规避风险。

qsc9012345的博客 1108

mysql中的timestamp类型时间范围

背景:服务数据入库的时候报错 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '2050-04-14 13:43:55' for column 'failure_time' at row 1 鉴于部分入库时间报错,首先排除了代码问题,想到了是不是timestamp时间有范围限制,于...

爱java的小蓝的博客 5690

MySQL时间戳详解及编程应用

TIMESTAMP和DATETIME是常用的时间戳类型,用于存储日期和时间信息。通过使用时间戳进行条件查询,可以检索满足特定日期范围或时间间隔的数据。本文将详细介绍MySQL时间戳的概念、用法和编程应用,并提供相应的源代码供参考。使用时应注意MySQL版本和配置的差异,以及数据类型和索引的选择。我们还可以使用时间戳进行条件查询,以检索满足特定日期范围或时间间隔的数据。如果要更新带有时间戳的表中的数据,可以使用UPDATE语句。要查询带有时间戳的表中的数据,可以使用SELECT语句。,它具有自动更新的功能。

2301_79331421的博客 532

MySQL查询时间戳

注意,时间戳的格式是’YYYY-MM-DD HH:MM:SS’,其中YYYY表示四位数的年份,MM表示两位数的月份,DD表示两位数的日期,HH表示两位数的小时,MM表示两位数的分钟,SS表示两位数的秒数。在上述查询中,我们使用DATE_FORMAT()函数将时间戳格式化为’YYYY-MM’的形式,并使用GROUP BY子句按月份对结果进行分组。上述函数中,NOW()返回当前日期和时间,WEEK()返回指定日期和时间所在的周数,TIMESTAMPDIFF()返回两个日期和时间之间的差值。

SrySmalltalk的博客 1026

mysql的timestamp(时间戳)详解以及2038问题的解决方案(好文章!!)

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。 生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本,由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,下面从几个方面来详细介绍时间戳数据类型。 时间戳数据存取 在MySQL上述三个大版本中,默认时间戳(Timestamp)类型的取值范围为’1970-01-01 00:00:01’ UTC 至’2038-0

HD243608836的博客 6775

webpack性能优化-optimization.splitChunks.chunks中的“all“、“async“和“initial“

最初,chunks(以及内部导入的模块)是通过内部 webpack 图谱中的父子关系关联的。CommonsChunkPlugin 曾被用来避免他们之间的重复依赖,但是不可能再做进一步的优化。 ——摘自 webpack 从 webpack v4 开始,移除了 CommonsChunkPlugin,取而代之的是 optimization.splitChunks。 而关于 optimization.splitChunks 中的chunks,webpack 官方文档却没有很好的进行举例解释,只说明了 async.

程序员秋风的博客 3137

MySQL时间戳2038年灾难:你的数据还能撑过去吗?

点击上方蓝字关注我Timestamp 类型在MySQL中通常用于存储日期和时间。然而,Timestamp类型的一个限制是其存储范围,它使用4字节(32位)整数来表示秒数,从而导致在2038年01月19日03:14:07之后无法正确存储时间戳。这是因为32位整数最大可表示的秒数是2^31 - 1,即2147483647秒,相当于约68年。因此,如果使用了timestamp类型则需要考虑在达到时间范围...

gjc592的博客 4459

GD32F470 DSP库移植避坑指南:从CMSIS版本冲突到AC6工程配置

本文详细解析了在GD32F470平台上移植CMSIS-DSP库的完整流程与关键避坑点。针对CMSIS版本冲突、AC6编译器下的浮点ABI配置、DSP库源文件添加等核心难题,提供了经过验证的解决方案,帮助开发者高效完成移植,确保硬件FPU正常工作并优化性能。

data3的博客 531

基于RK3588的高效音视频对讲系统设计与实现

本文详细介绍了基于RK3588芯片的高效音视频对讲系统设计与实现。文章深入剖析了RK3588在8K编解码、高性能音频DSP及丰富接口方面的优势,并提供了从开发环境搭建、分层软件架构设计,到视频采集编码、音频回声消除及低延迟网络传输的完整实战指南,旨在帮助开发者充分利用该芯片硬件能力,构建稳定、低延迟的实时通信系统。

dapp9builder的博客 256

mysql 解决 timestamp 的2038问题

mysql 解决 timestamp 的2038问题

weixin_46246967的博客 288

深入解读ES8388寄存器:从录音到播放,如何用代码控制这颗音频Codec

本文深入解析ES8388音频编解码器的寄存器设置,从录音到播放的完整控制流程。详细介绍了寄存器架构、录音通道配置、播放通道优化以及直通(Bypass)模式的高级应用,帮助开发者通过代码精准控制这颗高性能音频Codec,解决实际开发中的音质问题。

weixin_30275415的博客 550

mysql timestamp字段 为什么不能超过2038

特性原因结果内部格式使用32 位有符号整数存储自1970-01-01以来的秒数。存储空间小(4字节),效率高。范围限制32位有符号整数的最大值是。最大只能表示到。2038年问题秒数超过最大值,导致整数溢出。时间会跳回,数据错误。如果你的应用涉及到未来很远的日期(例如,保险、金融、长期项目),请优先使用 DATETIME类型。如果使用TIMESTAMP(例如用于记录数据创建/更新时间created_atupdated_at),请确保在2038 年之前。

ljh574649119的专栏 1037

《数据结构》知识点汇总+算法代码总结【全】

写在前面:本文写于吴签时期,在家备考时刷完数据结构王道书之后想着把书中重点梳理汇总一下。本文内容包括但不局限于王道数据结构每章的知识点及其课后习题所涵盖的知识点。本人曾在大三期间打过一些程序设计类比赛,所以本文所涉及到的代码不一定局限于王道书,但思想都一样。 期末复习和备考408均可使用第一章:绪论(不在考研大纲但很重要)第二章:线性表第三章:栈和队列第四章:串第五章:树与二叉树第六章:图第七章:查找 第一章:绪论(不在考研大纲但很重要) 数据结构三要素:逻辑结构、存储结构、数据的运算;其中逻辑结构包括线

qq_44622401的博客 17万+

蓝桥杯 stm32 PWM 测量频率

参考 数据手册:比赛 的板子 上面有两个信号发生器,如下图。通过 扭动 可变电阻 (R40, R39), 来实现 PWM 频率的改变。PA15PB4。PA15,PB4分别使用TIM2_CH1TIM3_CH1来对频率进行捕获。

wuyiyu_的博客 2931

你的 TIMESTAMP 字段,将在 2038 年“爆炸”!

特性DATETIMEDATETIMETIMESTAMP存储内容日期 (Y-M-D)时间 (H:M:S)日期 + 时间日期 + 时间存储空间3 字节3 字节5 字节 + 毫秒4 字节存储范围1000 ~ 9999 年±838 小时1000 ~ 9999 年1970 ~ 2038 年 (有Bug)时区感知否否否 (笨时钟)是 (自动转换, 智能时钟)NULL值允许允许允许允许。

郑龙飞 2371

N32G430学习笔记11- systick使用函数-延时函数

N32学习笔记11- systick使用函数-延时回调函数-延时函数

Car12 1416

【2038年问题】MYSQL的TIMESTAMP中最多能存储2038年?

2)在my_time.h的Line 60~64行,有这么一段定义,把MYSQL里面的年份最大设置为2038,为什么呢?要真的,我们的MYSQL就不能用了啊。,即使在 64 位系统上也是如此。这是因为数据库为了兼容性和存储效率,刻意限制了时间范围(例如 MySQL 的。因此,64 位时间戳几乎不受年份限制(代码中简化为 9999 年),彻底解决了 2038 年问题。(变为负数,即 “回绕”),导致时间计算错误(如日期变为 1901 年)。对于 32 位整数,其能表示的最大值为。超过这个时间,32 位。

snow_feeling的专栏 1089

图文详解秋叶ComfyUI整合包开启密码访问教程(附内网穿透实战经验) ComfyUI密码、ComfyUI-Login、ComfyUI内网穿透、秋叶整合包、ComfyUI安全防护

想远程访问 ComfyUI(跨设备或公网)不希望任何人随意使用或篡改服务需要给 ComfyUI 添加登录验证机制只要按照本文教程,安装插件,并设置好用户名密码,你就能把服务加上一道强力的门槛。📌配合ngrokfrp等内网穿透工具使用公网域名推荐启用 HTTPS(SSL证书可以用宝塔/ZeroSSL 申请)密码可以设置复杂一些,定期更换更安全📬如果你在配置过程中遇到问题,欢迎评论区留言交流,或者私信我,后续我也会更新更多 ComfyUI 插件教程、安全部署经验等内容。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2732

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

再不修就晚了:2038 年,MySQL 的“千年虫”会让你的系统崩溃——深度解析 2038 年问题及应对方案

2038年问题将影响依赖32位Unix时间戳的系统,包括MySQL中的TIMESTAMP字段。当时间戳超过2038年1月19日03:14:07时,32位整数会溢出导致时间错误。MySQL的TIMESTAMP类型基于Unix时间戳,而DATETIME不受影响。建议对远期时间需求使用DATETIME,升级到64位系统和MySQL 8.x,并检查现有TIMESTAMP字段。该问题类似于Y2K,需要提前防范以避免未来数据混乱。对于关键业务系统,应尽早将TIMESTAMP迁移为DATETIME或BIGINT类型。

qq_46371374的博客 3245

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

时间戳timestamp类型

时间戳timestamp类型 Timestamp ​ Mysql中timestamp的格式为"YYYY-MM-DD:HH-MM-SS",显示宽度是19个字符,如果你在insert的时候指定(null),那么它会自动显示为当前操作的时间。但是如果你在insert操作的时候没有插入数据,那么默认为0000-00-00 00-00-00,TIMESTAMP 类型使用 4 个字节,范围是 ‘1970-01...

qq_38238296的博客 6万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: timestamp 、 datetime 和unix timestamp傻傻分不清?
下一篇: mysql的decimal与Java的BigDecimal用法
T-OPEN
T-OPEN 新星创作者: Java技术领域 新星创作者: Java技术领域
博客等级 码龄9年 2万+粉丝 241原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T-OPEN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值