我是从Spring启动应用程序连接azure MySQL数据库的新手。
以下是application.properties
中提到的片段
spring.datasource.url=jdbc:mysql://XXXX.mysql.database.azure.com:3306/MyDbName
spring.datasource.username= ******
spring.datasource.password= ******
我遇到了以下例外情况
org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Unknown system variable 'query_cache_size'
我已经用谷歌搜索过,在某处提到需要将MySQLConnector的版本更新为8.0.13
请帮我找到解决方案。
基于您的异常,这不是因为 Azure mysql。这是因为系统变量"query_cache_size"。请参考:java.sql.SQLException:未知的系统变量"query_cache_size"
我也在azure MySQL上遇到了这种快乐。正如 dvo 所提到的,当它认为它低于版本 8.0.3 时,它会将此变量放入其中。
来自com.mysql.cj.NativeSession.java...
if (!versionMeetsMinimum(8, 0, 3)) {
queryBuf.append(", @@query_cache_size AS query_cache_size");
queryBuf.append(", @@query_cache_type AS query_cache_type");
}
但是由于我的 Azure MySQL 版本是 8.0.15,它与我的驱动程序版本相匹配,所以我怀疑虽然数据库很可能是版本 8,但驱动程序处理的堆栈的一部分不是。
编辑:
从 https://learn.microsoft.com/en-us/azure/mysql/concepts-limits
当前已知问题
建立连接后,MySQL服务器实例显示错误的服务器版本。要获取正确的服务器实例引擎版本,请使用 select version((;命令。
所以我猜这是问题所在,就目前而言,Azure MySQL 8将无法与Java mysql连接器一起使用。
我可能会考虑自己构建连接器并将版本号硬编码为 8.0.15。多么快乐。
编辑编辑:
修改了服务器版本.java parseVersion(...( 返回
return new ServerVersion(8, 0, 15);
这足以让我继续我的工作。
这是一个问题Microsoft应该尽快修复他们这边。