怎么set sql_mode?

cos800

尝试修改config/database.php里的options

            'options' => [
                \PDO::ATTR_TIMEOUT => 3,
                // 不生效
                \PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=''",
            ]

发现并不生效,

又尝试修改support/bootstrap.php,添加:

Db::statement("SET sql_mode=''");

刚启动是生效的,可是过了一会儿又失效了,
请问一下要在哪里配置?

138 1 3
1个回答

cos800

找到问题了,
新版illuminate/database配置新增了一个modes
改成这样就可以了:

            'options' => [
                \PDO::ATTR_TIMEOUT => 3,
                // 不生效
//                \PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=''",
            ],
            'modes' => [
                'STRICT_TRANS_TABLES', // 在事务存储引擎(如 InnoDB)中启用严格 SQL 模式,使 MySQL 拒绝无效数据插入。
                'NO_ZERO_IN_DATE', // 不允许“零月”或“零日”出现,日期必须完整。例如,2023-00-15 或 2023-01-00 都会报错。
                'ERROR_FOR_DIVISION_BY_ZERO', // 遇到除零操作时抛出错误,而不是发出警告,避免数据不一致性。
                'NO_ENGINE_SUBSTITUTION', // 如果请求的存储引擎不可用,则 MySQL 会报错,而不是自动切换到默认的存储引擎。
            ],
  • lepig 3天前

    这个确实用的人很少。 如果mysql是自己管理的直接改my.cnf就行了。 如果是在运维或者DBA手里,有些DBA不愿意操作,智能按照你这个改了。 我也第一看到还可以这样设置,学习了。

×
🔝