微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 重新介绍“未知的初始字符集索引”错误?

我有一个连接到mysql服务器的Java客户端应用程序.客户端和服务器都在docker容器中运行.

我注意到官方的MysqL Docker镜像最近更新了MysqL服务以运行版本:’8.0.1-dmr’

由于此更改,我的Java客户端应用程序无法连接到MysqL实例;它失败并出现以下错误

Caused by: java.sql.sqlException: UnkNown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
    at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:910) ~[mysql-connector-java-5.0.8-bin.jar:na]
    at com.MysqL.jdbc.Connection.configureClientCharacterSet(Connection.java:2412) ~[mysql-connector-java-5.0.8-bin.jar:na]
    at com.MysqL.jdbc.Connection.initializePropsFromServer(Connection.java:4139) ~[mysql-connector-java-5.0.8-bin.jar:na]
    at com.MysqL.jdbc.Connection.createNewIO(Connection.java:2789) ~[mysql-connector-java-5.0.8-bin.jar:na]
    at com.MysqL.jdbc.Connection.<init>(Connection.java:1555) ~[mysql-connector-java-5.0.8-bin.jar:na]
    at com.MysqL.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) ~[mysql-connector-java-5.0.8-bin.jar:na]
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:307) ~[tomcat-jdbc-8.0.20.jar:na]
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200) ~[tomcat-jdbc-8.0.20.jar:na]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699) ~[tomcat-jdbc-8.0.20.jar:na]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633) ~[tomcat-jdbc-8.0.20.jar:na]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:186) ~[tomcat-jdbc-8.0.20.jar:na]
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126) ~[tomcat-jdbc-8.0.20.jar:na]

我不拥有Java客户端应用程序的源代码,因此我无法轻松升级它正在使用的JDBC驱动程序(即mysql-connector-java-5.0.8-bin.jar).

这与以前运行MysqLd版本的MysqLdb:8 docker图像一起工作:’8.0.0-dmr’

此问题是否有任何解决方法不涉及更新JDBC驱动程序?这是MysqLd的回归吗?

解决方法:

This讨论了自8.0以来发生的变化
列出的要点之一就是:

Character Set Support

Important Change: The default character set has changed from latin1 to utf8mb4. These system variables are affected:

The default value of the character_set_server and character_set_database system variables has changed from latin1 to utf8mb4.

The default value of the collation_server and collation_database system variables has changed from latin1_swedish_ci to utf8mb4_0900_ai_ci.

因此,除非指定了显式字符集和排序规则,否则新对象的认字符集和排序规则与以前不同.这包括数据库和其中的对象,例如表,视图和存储的程序.

保留以前认值的一种方法是在my.cnf文件中使用以下行启动服务器:

[MysqLd]
character_set_server=latin1
collation_server=latin1_swedish_ci

由于您正在运行docker,因此另一个选项是将这些配置选项指定为docker run命令的命令行参数.例如:

docker run -d \
--network my-net \
-h MysqLdb \
--name MysqLdb \
-p 3306:3306 \
-e MysqL_RANDOM_ROOT_PASSWORD=yes \
-e MysqL_DATABASE=mydb \
-e MysqL_USER=admin \
-e "MysqL_PASSWORD=admin" \
MysqL:8 --character-set-server=latin1 --collation-server=latin1_swedish_ci

在客户端,如果你想进行更改 – 希望这些应该足够:

要使用带有Connector / J的4字节UTF-8字符集,请使用character_set_server = utf8mb4配置MysqL服务器,并将characterEncoding保留在Connector / J连接字符串之外.

然后,Connector / J将自动检测UTF-8设置

希望这可以帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐