前言
本博客是采用Rust编写的后台,使用sqlx插件连接mysql数据库,但是在涉及时间保存的时候,总是默认是格林兰时区,而不是北京时区。即使已经调整了mysql的时区,仍然无法解决。因此判断是sqlx的问题导致,查阅网上的资料发现确实如此
一、原因
sqlx的底层连接数据库时,默认采用了UTC时区,因此总是相差8个小时。
二、解决办法
方法一:after_connect
使用after_connect执行 "SET time_zone='+08:00';" ,如下,但是我的不行,应该是sqlx的版本不同。我的sqlx:0.8.3 会提示没有after_connect方法
let pool = match MySqlPoolOptions::new()
.after_connect(|conn, _meta| Box::pin(async move {
conn.execute("SET time_zone='+08:00';").await?;
Ok(())
}))
.connect(&db_url).await {
Ok(value) => value,
Err(_)=>{
panic!("数据库连接失败,请检查网络或数据库设置");
}
};
方法二:MySqlConnectOptions::new()
使用MySqlConnectOptions::new() 配置
let options = MySqlConnectOptions::new()
.host("localhost")
.username("username")
.password("password")
.database("database")
.timezone("+8:00".to_string());
let pool = MySqlPool::connect_with(options)
.await
.expect("创建连接池失败");
参考:
评论先审后显;邮箱仅用于生成头像(MD5),不会公开显示