我正在使用带有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`
为什么会发生这种情况?如何阻止它?
答案 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后,此问题不再存在。