2015-04-04 52 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,此問題不再存在。