Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “重新介绍”;未知初始字符集索引“;错误?_Java_Mysql_Docker_Jdbc - Fatal编程技术网

Java “重新介绍”;未知初始字符集索引“;错误?

Java “重新介绍”;未知初始字符集索引“;错误?,java,mysql,docker,jdbc,Java,Mysql,Docker,Jdbc,我有一个连接到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

我有一个连接到
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.sql.SQLException:从服务器接收到未知的初始字符集索引“255”。可以通过“characterEncoding”属性强制初始客户端字符集。
在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)~[mysql-connector-java-5.0.8-bin.jar:na]
在com.mysql.jdbc.Connection.configureClientCharacterSet(Connection.java:2412)~[mysql-connector-java-5.0.8-bin.jar:na]
在com.mysql.jdbc.Connection.initializePropsFromServer(Connection.java:4139)~[mysql-connector-java-5.0.8-bin.jar:na]
在com.mysql.jdbc.Connection.createNewIO(Connection.java:2789)~[mysql-connector-java-5.0.8-bin.jar:na]
在com.mysql.jdbc.Connection.(Connection.java:1555)~[mysql-connector-java-5.0.8-bin.jar:na]
在com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)~[mysql-connector-java-5.0.8-bin.jar:na]
在org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:307)~[tomcat-jdbc-8.0.20.jar:na]
在org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)~[tomcat-jdbc-8.0.20.jar:na]
在org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)~[tomcat-jdbc-8.0.20.jar:na]
在org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)~[tomcat-jdbc-8.0.20.jar:na]
在org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:186)~[tomcat-jdbc-8.0.20.jar:na]
在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
Version:'8.0.0-dmr'的
mysqldb:8
docker映像一起使用的

对于这个问题,是否有不涉及更新JDBC驱动程序的解决方法?这是mysqld中的回归吗?

讨论了自8.0以来发生的变化 列出供您参考的要点之一是:

字符集支持

重要更改:默认字符集已从latin1更改为utf8mb4。这些系统变量受到影响:

character_set_服务器和character_set_数据库系统变量的默认值已从latin1更改为utf8mb4

排序规则服务器和排序规则数据库系统变量的默认值已从latin1\u swedish\u ci更改为utf8mb4\u 0900\u ai\u 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

在客户机上,如果您想进行更改,希望这些就足够了:

要将4字节UTF-8字符集与连接器/J一起使用,请使用
字符集\u server=utf8mb4
配置MySQL服务器,并将
字符编码
保留在连接器/J连接字符串之外

接头/J随后将自动检测
UTF-8
设置


希望这有帮助

太好了,这就解决了。我选择使用命令行选项
--character set server=latin1--collation server=latin1_-swedish_ci
,因为我不想创建配置文件并将其装载到docker容器中。很高兴帮助@fgreg编辑my.ini文件对我有效,但你知道为什么瑞典文和拉丁文?似乎有点武断版本之间有太多的变化,因此目前无法指出具体原因!