Description
when connect mysql has default behavior, in mysql log
2023-03-06T16:00:24.911812+08:00 15 Query SET sql_mode=(SELECT CONCAT(@@sql_mode, ',PIPES_AS_CONCAT,NO_ENGINE_SUBSTITUTION')),time_zone='+00:00',NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
The above default behavior will cause incorrect access to the database, such as time_zone='+00:00'
Do not give any default behavior when the user does not have custom parameters
Steps to Reproduce
Cargo.toml
chrono = {version = "0.4", features=["default", "serde"]}
sqlx = {version = "0.6", features=["default", "mysql", "all-types", "runtime-tokio-native-tls"]}
tokio = {version = "^1.23.0", features=["full"]}
sea-orm = {version = "0.11", features=["default", "runtime-tokio-native-tls", "sqlx-mysql"]}
log = {version = "0.4.17"}
Code
rdbc.rs
use sea_orm::{ConnectOptions, Database, DatabaseConnection, DbErr};
use std::time::Duration;
pub async fn get_orm_db(dsn: &str, is_log: bool) -> Result<DatabaseConnection, DbErr> {
let mut opt = ConnectOptions::new(dsn.to_string());
opt.max_connections(1)
.min_connections(0)
.connect_timeout(Duration::from_secs(10))
.idle_timeout(Duration::from_secs(5))
.max_lifetime(Duration::from_secs(5))
.sqlx_logging(is_log)
.sqlx_logging_level(log::LevelFilter::Info);
Database::connect(opt).await
}
pub async fn get_orm_db_by_default(
host: &str,
port: i16,
username: &str,
password: &str,
database: &str,
is_log: bool,
) -> Result<DatabaseConnection, DbErr> {
let dsn = format!(
"mysql://{username}:{password}@{host}:{port}/{database}",
username = username,
password = password,
host = host,
port = port,
database = database,
);
// for MySQL, use MySqlPoolOptions::new()
get_orm_db(&dsn, is_log).await
}
main.rs
pub mod rdbc;
fn main() {
println!("Hello, world!");
}
#[cfg(test)]
mod tests {
use crate::rdbc::get_orm_db_by_default;
use sea_orm::{ConnectionTrait, DatabaseBackend, DbErr, Statement};
#[tokio::test]
async fn conn_test_01() -> Result<(), DbErr> {
let db = get_orm_db_by_default("127.0.0.1", 3306, "HH", "oracle12", "easydb", true).await?;
let _ = db
.execute(Statement::from_string(
DatabaseBackend::MySql,
"SELECT 1".to_owned(),
))
.await?;
db.close().await
}
}
**MySQL log **
2023-03-06T16:00:24.908676+08:00 15 Connect HH@127.0.0.1 on easydb using SSL/TLS
2023-03-06T16:00:24.911812+08:00 15 Query SET sql_mode=(SELECT CONCAT(@@sql_mode, ',PIPES_AS_CONCAT,NO_ENGINE_SUBSTITUTION')),time_zone='+00:00',NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
2023-03-06T16:00:24.913169+08:00 15 Prepare SELECT 1
2023-03-06T16:00:24.913446+08:00 15 Execute SELECT 1
2023-03-06T16:00:24.913890+08:00 15 Quit
Description
when connect mysql has default behavior, in mysql log
The above default behavior will cause incorrect access to the database, such as
time_zone='+00:00'Do not give any default behavior when the user does not have custom parameters
Steps to Reproduce
Cargo.toml
Code
rdbc.rs
main.rs
**MySQL log **