在MySQL连接器/ j中生成了大量的“显示全部列...”查询

时间:2015-04-04 20:26:12

标签: mysql mysql-connector spring-jdbc

我正在使用带有mysql-connector-j的Spring-jdbc NamedParameterJdbcTemplate,并且在几乎所有语句都看起来像"SHOW FULL COLUMNS FROM ..."之后,我发出了大量的“额外”SQL。

这是一段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`

为什么会发生这种情况?如何阻止它?

1 个答案:

答案 0 :(得分:1)

经过一些调查后,问题似乎是由于ResultSetMetaData.isCaseSensitive()Field.getCollation()的执行不当造成的,而CachedRowSet是从useDynamicCharsetInfo调用的,而false则由jdbc:mysql://localhost/mydb?useDynamicCharsetInfo=false 调用JDBC。

幸运的是,有一个快速的解决方法是将{{1}}设置为{{1}},例如:

{{1}}

=== 2015年12月编辑===

放弃使用GPL许可的MySQL连接器而转而使用LGPL许可MariaDB-connector后,此问题不再存在。