多年来,我们在内部开发了一个自定义的 Java JDBC 连接池类和一个旧的 MariaDB JDBC 类。
最近,我们开始在内部测试升级,包括:
我们遇到了一个大问题。从历史上看,我们关闭了严格模式,因为成千上万的遗留程序无视数据截断。
当我打开 JDBC 驱动程序调试时,令我惊讶的是我发现了这个:
[15:34:35.219] /* conn id 237527 时钟:1679340875219 / SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; [15:34:35.228] / conn id 237524 clock: 1679340875228 */ SET autocommit=1;
所以发生的事情是,STRICT_TRANS_TABLES 在连接时被打开,即使我们既没有请求也没有期望。
我在谷歌搜索的 Hikari、AWS 或 Connector J 文档中找不到任何提及 - 究竟为什么会发生这种情况 - 当然我们的应用程序不会要求这样做。
一个线索是这只发生在 Hikari 身上。当我们停止使用 Hikari 并回到我们自己的游泳池时,它就停止了。然而,我在 Hikari 文档中找不到任何关于设置 sql_mode 的内容。
当我们恢复到我们自己的池类时,这种行为就会停止。
当我们停止使用 Hikari 时,这种行为就会停止。
我们在 Hikari 文档中找不到 sql_mode 或如何设置/防止更改的提及。