gorm中created_at 时间,go time时间,mysql数据库时间的一些问题总结_gorm created_at-csdn博客


本站和网页 https://blog.csdn.net/BlackNamePlate/article/details/121940269 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

gorm中created_at 时间,go time时间,mysql数据库时间的一些问题总结_gorm created_at-CSDN博客
gorm中created_at 时间,go time时间,mysql数据库时间的一些问题总结
最新推荐文章于 2024-04-25 15:28:54 发布
在下宝龙、 阅读量5.5k 收藏 5 点赞数 3 分类专栏: Go Mysql 文章标签: 数据库 golang mysql gorm
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/BlackNamePlate/article/details/121940269
版权
同时被 2 个专栏收录
3 篇文章
0 订阅
订阅专栏
2 篇文章
gorm中created_at 时间,go time时间,mysql数据库时间的一些问题总结
问题1 gorm中created_at 时间
在生成的时候发现数据库的时间
慢了8个小时
,后来发现是需要在连接数据库的时候加上参数
&loc=local
func
init
driverName
:=
viper
GetString
"datasource.driverName"
host
"datasource.host"
port
"datasource.port"
database
"datasource.database"
username
"datasource.username"
password
"datasource.password"
charset
"datasource.charset"
args
fmt
Sprintf
"%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local"
//loc=local不能忘记
db
err
Open
if
!=
nil
panic
"failed to connect database err: "
+
Error
AutoMigrate
&
defs
Users
Video_Info
Comments
Sessions
dbConn
=
问题2 go内置的time一些问题
使用
time.Parse()
解析字符串生成的时间的时区是
UTC
,而你调用
time.Now()
则是
CST
,这导致
你数据库中查时间段的数据会出错
,如下代码
TestListComments
testing
vid
"123"
layout
"Jan 02 2006, 15:04:05"
from
time
Parse
"Dec 14 2021, 20:18:15"
//不加载时区
fromUnix
Unix
Println
to
Now
toUnix
comments
ListComments
Errorf
"Error of list comments:%v"
for
val
range
Printf
"%#v"
输出有误
2021
-12-14
20
:18:15 +0000 UTC
1639513095
//开始时间反而大于 结束时间,因为时区不对
21
:22:25.3100649 +0800 CST
+0.032457601
1639488145
解析字符串并
加载时区
之后,时区一致
// 加载时区
loc
LoadLocation
"Asia/Shanghai"
//一定要这个否则会弄错的
ParseInLocation
输出
:18:15 +0800 CST
1639484295
:20:16.129897 +0800 CST
+0.088633101
1639488016
..
.一些comment数据
问题3 mysql中的时间问题
我用gorm查询某个时间段的评论代码如下,可以看到我是以from和to 两个int64 类型,来作为查询条件,这是为了对应go中的unix时间戳也是int64
string
int64
CommentWithName
error
lock
RLock
defer
RUnlock
var
res
Debug
Raw
"select comments.id,users.username,comments.content FROM comments "
"INNER JOIN users on comments.author_id=users.id where comments.video_id=? AND comments.created_at > FROM_UNIXTIME(?) AND "
"comments.created_at <= FROM_UNIXTIME(?)"
Scan
return
但是他在Mysql内部执行的时候出了一些问题,什么问题呢,也是时区问题。
关键在于
FROM_UNIXTIME(?)
这个函数,他这个函数是将
unix时间戳转为正常时间
,这个正常时间是和时区有关的,
你相同的unix时间戳转为不同时区的正常时间,它是不一样的
所导致的问题
这会导致一个什么问题,就是你在插入评论的时候,插入的created_at这个字段的值是你的时区时间,但是你在查找的时候,mysql调用
这个函数转化的时间又是另外时区的时间,那么你查询的时候就会出问题。
基础命令熟悉
在实验之前,先准备一下基础的命令
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。
SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S')
正常时间格式转换成unix时间戳
select unix_timestamp(current_date);
show variables like "%time_zone%";
查看时区
±-----------------±-------+
| Variable_name | Value |
| system_time_zone | CST |
| time_zone | SYSTEM |
2 rows in set (0.00 sec)
#time_zone说明mysql使用system的时区,system_time_zone说明system使用CST时区
修改时区
set global time_zone = '+8:00';
##修改mysql全局时区为北京时间,即我们所在的东8区
set time_zone = '+8:00';
##临时修改,只用于当前会话
flush privileges;
#立即生效
然后当你设置不同的时区的时候,把unix时间戳转为正常时间就会不一样
情况1 当时区为+8.00
system_time_zone
time_zone
+08:00
执行
select from_unixtime(1639484295,'%Y-%m-%d %H:%i:%S')
得到
2021-12-14 20:18:15
情况2 当时区为+0.00
+00:00
2021-12-14 12:18:15
差了8个小时
因此即然时间不对,那么你去查找某一时间段的内容,当然也会找不出。
所以在使用这三个内容的时候需要注意时间问题
优惠劵
关注
点赞
觉得还不错?
一键收藏
知道了
评论
gorm中created_at 时间,go time时间,mysql数据库时间的一些问题总结问题1 gorm中created_at 时间在生成的时候发现数据库的时间慢了8个小时,后来发现是需要在连接数据库的时候加上参数&loc=localfunc init(){ driverName := viper.GetString("datasource.driverName") host := viper.GetString("datasource.host") port := viper.Ge
复制链接
扫一扫
专栏目录
格式化
时间
问题
详解
09-19
主要给大家介绍了关于
的相关资料,文
通过示例代码介绍的非常详细,对大家学习或者使用
具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
快速入门
GORM
,使用
进行CURD
大河之犬的博客
05-29
934
约定:
倾向于约定,而不是配置。默认情况下,
使用ID作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用
Create
dAtUpdatedAt字段追踪创建、更新
为了方便模型定义,
内置了一个
.Model结构体。
.Model是一个包含了四个字段的
Golang
结构体//
.Model 定义 type Model struct {
参与评论
您还未登录,请先
登录
后发表或查看评论
Gorm
入门-创建&查询
umgsai的专栏
03-27
1763
初始化go mod项目
9:56PM ]
[ shangyidong@shangyidongdeiMac:~/go/src/awesomeProject ]
$ go mod init gitee/shang/awesomeProject
go: creating new go.mod: module gitee/shang/awesomeProject
go: to add module requirements and sums:
go mod tidy
设置GOPROXY
基础 -- CRUD 接口
chinusyan的专栏
801
基础 -- CRUD 接口 (
、Query、Advanced Query)
go
报错:Error 1292: Incorrect date
value: ‘XXX‘ for column ‘
create
d_at‘ at row 1
哇咔咔的博客
07-20
2395
在用go语言写项目操作
时,由于我的User结构体
存在
字段然后在更新
时报了错从报错上来看大概是值的类型与值不对应造成的不合法于是我将值类型改为data
stamp都不行,于是去查资料这个链接解决了我的
,但该链接的主人解决的是
不能为0,我一开始也有碰到,后面不懂解决遂放弃那个本来在我项目里的del_at字段。造成
的主要原因是
的严格模式造成的。.........
踩过的坑
持之以恒2016
08-11
5706
1. Scan error on column index 1, name "
d_at": unsupported Scan, storing driver.Value type []uint8
需要注意的点
hell_world!
10-25
2482
1、慎用
dAt、UpdatedAt和DeletedAt字段
要疯了。
的字段要避开这
d_at、updated_at、deleted_at字段,改为
d_
、updated_
和deleted_
2、查询的时候,如果没有查到记录也算一个err,需要在我们正常理解的err之前判断,类似如下的顺序:
err := db.
T...
ORM框架
详解(超详细)
啊阿啊啊啊杨的博客
05-09
3341
是一款使用 Go 语言编写的 ORM(对象关系映射)库,它提供了一种简洁、高效、灵活的方式来操作
支持多种关系型
,包括
MySQL
、PostgreSQL、SQLite 等,同时也提供了一些高级功能,例如事务、预加载、关联查询等。
之模型定义
qq_53267860的博客
06-18
425
模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成例如:
约定
作为主键,使用结构体名的
作为表名,字段名的
作为列名,并使用 、 字段追踪创建、更新
遵循
已有的约定,可以减少您的配置和代码量。如果约定不符合您的需求,
允许您自定义配置它们
定义一个
结构体,其包括字段 、、、
您可以将它嵌入到您的结构体
,以包含这几个字段,详情
连接
参数loc, parse
Time
翔云
04-30
6122
在使用
的时候,经常会用到和。
这两个参数的作用是什么呢?先说下不带这两个参数存在的
:下面看下这两个参数。
如果配置了,
的、等
类型字段将自动转换为
的类型。 类似的 ,会被转为的零值。否则,如果没有配置或配置了, 只会转为
设置转换为
类型时, 使用的时区信息 (当设置parse
=true)。
默认值 ,表示解析为UTC
一般设置为,表示使用当地
。这个设置只表示解析为类型时,使用的配置。
基础
weixin_45176825的博客
07-25
1445
基于GO语言实现的仿
的一个操作SQL
的框架源代码
08-16
实现
备份的操作方法
09-09
主要介绍了
备份的操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
易语言
_ADO
操作模块
07-18
操作模块源码,
操作模块,取易对象错误,刷新属性集,取属性数,取属性信息,取属性信息_v2,置属性信息,置属性信息_v2,取错误数,刷新错误集,清空错误集,取错误信息,是否连接持久文件,...
如何避免全表扫描?
常备不懈
04-21
1199
全表扫描通常在查询
时消耗大量资源,尤其是当表
的数据行数非常多时。避免全表扫描可以显著提高
查询的性能和效率。以下是一些有效的策略来避免全表扫描:
Spring 事务
最新发布
qq_66292058的博客
04-25
923
在操作
,我们通常会遇到这样一种场景,对于一组操作,要么全部成功,要么全部失败。在
,专门对这样一组操作进行了定义,那就是事务。原子性:对于一个事务,只有两个执行结果,要么成功要么失败。一致性:事务执行前后
都是处于一个正确的状态,也就是事务对
的影响是符合预期的持久化:事务的执行会直接对硬盘里的数据进行修改隔离性:不同事务之间相互隔离的程度start(开启事务):开启一个事务rollback(回滚事务):回滚一个事务(使
回到开启事务前的状态)
redis分布式锁到底怎么用
LinggoLing的博客
04-22
424
分布式锁到底怎么用
SpringBoot JPA使用
gochenguowei的博客
527
是 Spring 框架提供的一个模块,用于简化与关系型
的交互和数据访问。它基于JPA(Java Persistence API)标准,并提供了一组易于使用的API和工具,帮助开发人员更轻松地进行
操作。通过Spring Data JPA,开发人员可以通过编写简洁的代码来执行常见的 CRUD 操作,同时还支持高级查询、分页、事务管理等功能。它的目标是提供一种更简单、更高效的方式来处理
操作,减少开发人员的工作量,并提高应用程序的可维护性和可扩展性。
redis的订阅与发布功能
qq_19891197的博客
04-20
624
go 语言 DeletedAt DeletedAt
:"index"
类型存入字段
05-30
,我们可以通过定义一个 `DeletedAt` 字段来实现软删除。这个字段的类型通常是 `
`,表示被删除的
。在使用
进行
操作时,当我们调用 `Delete` 方法删除数据时,
会自动将 `DeletedAt` 字段设置为当前
,从而实现软删除的效果。
示例代码:
```go
import "
"
type User struct {
ID
uint
:"primaryKey"`
Name
Age
int
DeletedAt
:"index"`
```
在上面的代码
,我们定义了一个 `User` 结构体,其
包含一个 `DeletedAt` 字段,类型为 `
`,并添加了 `
:"index"` 标签来为该字段创建索引。
当我们需要软删除某个 `User` 对象时,只需要调用 `Delete` 方法即可:
var user User
db.First(&user, 1)
db.Delete(&user)
上面的代码
,我们首先查询 ID 为 1 的 `User` 对象,并将其赋值给 `user` 变量,然后调用 `Delete` 方法删除该对象。此时,
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄5年
暂无认证
40
原创
46万+
周排名
195万+
总排名
1万+
访问
等级
445
积分
粉丝
19
获赞
13
47
私信
热门文章
5595
gin 框架路由重定向,请求转发,ANY ,NoRoute,路由组
2375
Windows VSCode 安装C++ 一定可以的 详细版
1276
2021年计算机保研 浙软保研经历
1241
K8s init的一些坑
1084
分类专栏
C++
1篇
K8s
3篇
2篇
计算机基础知识
Bug专栏
PAT浙大机试题
4篇
Mybatis
6篇
JavaWeb
Java注解和反射
Java多线程
JavaSE
Docker
Java预备工作
最新评论
1135 Is It A Red-Black Tree 测试点2和3
笨笨sg:
感谢,我也遇到这个问题了,还有就是想问一下红黑树是不是不允许插入相同的值(我看这个样例也没有考虑)
m0_62296757:
博主你好,听说21年推免系统开放前几天浙软没招满,又来了一波十推是吗?当时一开始报满了吗?
VSCode一些c++文件可以断点调试,另外一部分却直接运行到底无法调试。
L_Y U E:
还有 单个括号符号 也不行
在下宝龙、:
确实 没搞清楚是这样的 - =
1119 Pre- and Post-order Traversals (30 分)根据前序后序来建树再中序输出
歪日 这都给你看到我了
最新文章
为什么使用消息队列?有什么好处和坏处
2022年
2021年
40篇
目录
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值