2017-05-16 32 views
1

我有一個連接到mysql服務器的Java客戶端應用程序。客戶端和服務器都在Docker容器中運行。重新引入「未知的初始字符集索引」錯誤?

我注意到,MySQL官方泊塢窗圖像最近更新MySQL服務運行Version: '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 Version: '8.0.0-dmr'

有任何解決方法這個問題不涉及更新JDBC驅動程序以前mysqldb:8泊塢窗圖像的工作?這是在mysqld迴歸?

回答

1

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 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,配置具有character_set_server=utf8mb4的MySQL服務器,並將characterEncoding留在Connector/J連接字符串之外。

連接器/ J便會自動偵測UTF-8設置

希望這有助於!

+0

完美,固定它。我選擇使用命令行選項'--character-set-server = latin1 --collat​​ion-server = latin1_swedish_ci'來代替,因爲我不想創建配置文件並將其裝載到docker容器。 – FGreg

+0

樂意幫忙@FGreg –

相關問題