2015-04-04 223 views
0

我正在使用Spring-jdbc NamedParameterJdbcTemplate和mysql-connector-j,并且我在几乎每一个时间都会发出大量的“额外”SQL声明全部看起来像"SHOW FULL COLUMNS FROM ..."在MySQL连接器中生成“SHOW FULL COLUMNS FROM ...”查询的数量/ j

这里是一片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

经过一番调查后,似乎这个问题是由MySQL的连接器实现的Field.getCollation()差是从ResultSetMetaData.isCaseSensitive()叫这又是CachedRowSet它使用了Spring JDBC称为所致。

幸运的是有一个快速的解决方法是设置useDynamicCharsetInfofalse例如:

jdbc:mysql://localhost/mydb?useDynamicCharsetInfo=false 

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

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