Skip to content

Default connect mysql set some variables #1524

@daiguadaidai

Description

@daiguadaidai

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions