在 MySQL connector/j 中生成了大量 "SHOW FULL COLUMNS FROM ..." 查询
Tons of generated "SHOW FULL COLUMNS FROM ..." queries in MySQL connector/j
我将 Spring-jdbc NamedParameterJdbcTemplate 与 mysql-connector-j 一起使用,我收到了大量的 "extra" SQL几乎所有的语句都看起来像 "SHOW FULL COLUMNS FROM ..."
.
这是一段 MySQL 日志,其中显示了我的查询以及许多我没有发出的查询:
Query SELECT p.*, t.textdata descr, ... from parts p, string t where .....
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`strings`
Query SHOW FULL COLUMNS FROM `mydb`.`strings`
为什么会发生这种情况,我该如何阻止它?
经过一些调查,问题似乎是由 mysql 连接器中 Field.getCollation() 的执行不当引起的,该连接器从 ResultSetMetaData.isCaseSensitive()
调用,而 CachedRowSet
又调用该连接器] 被 Spring jdbc.
使用
幸运的是,有一个快速的解决方法是将 useDynamicCharsetInfo
设置为 false
例如:
jdbc:mysql://localhost/mydb?useDynamicCharsetInfo=false
=== 编辑 2015 年 12 月 ===
在放弃 GPL 许可的 MySQL-连接器转而使用 LGPL 许可的 MariaDB-connector 后,此问题不再存在。
我将 Spring-jdbc NamedParameterJdbcTemplate 与 mysql-connector-j 一起使用,我收到了大量的 "extra" SQL几乎所有的语句都看起来像 "SHOW FULL COLUMNS FROM ..."
.
这是一段 MySQL 日志,其中显示了我的查询以及许多我没有发出的查询:
Query SELECT p.*, t.textdata descr, ... from parts p, string t where .....
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`parts`
Query SHOW FULL COLUMNS FROM `mydb`.`strings`
Query SHOW FULL COLUMNS FROM `mydb`.`strings`
为什么会发生这种情况,我该如何阻止它?
经过一些调查,问题似乎是由 mysql 连接器中 Field.getCollation() 的执行不当引起的,该连接器从 ResultSetMetaData.isCaseSensitive()
调用,而 CachedRowSet
又调用该连接器] 被 Spring jdbc.
幸运的是,有一个快速的解决方法是将 useDynamicCharsetInfo
设置为 false
例如:
jdbc:mysql://localhost/mydb?useDynamicCharsetInfo=false
=== 编辑 2015 年 12 月 ===
在放弃 GPL 许可的 MySQL-连接器转而使用 LGPL 许可的 MariaDB-connector 后,此问题不再存在。