Mysql 8.0版本驅動getTables返回全部庫的表的問題

  • MySQL Connector/J 8.0版本驅動向下兼容以前的5.5+版本MySQL,若是你使用的是5.5+版本MySQL,均可以升級成8.0版本驅動。
  • 若是你是使用的5.X版本驅動,須要將Driver Class換成: com.mysql.cj.jdbc.Driver

須要注意的是:
8.0版本驅動DataSource相關的參數有變化:html

好比8.0版本驅動將參數 nullCatalogMeansCurrent 的默認值由true改成了false,若是你使用DatabaseMetaData.getTables獲取全部的表信息,8.0版本驅動將返回全部庫的表。java

// 默認會返回全部庫的表,而不只是datasource指定的庫
databaseMetaData.getTables(null, null, null, new String[]{"TABLE"})

解決方案就是在鏈接池初始化時,將這個參數改成true,以HikariCP爲例:mysql

Java Config:git

HikariConfig config = new HikariConfig();
...
config.addDataSourceProperty("nullCatalogMeansCurrent", true);

Spring Boot 配置:github

spring.datasource.hikari.data-source-properties.nullCatalogMeansCurrent=true

其餘參數變化請參考[官方文檔]spring


Diboot - 簡單高效的輕代碼開發框架sql

相關文章
相關標籤/搜索