当前位置: 首页 > 面试题库 >

重新引入“未知的初始字符集索引”错误?

沈单弓
2023-03-14
问题内容

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

我注意到官方mysql Docker镜像最近更新了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)。

这与以前mysqldb:8运行mysqld的docker镜像一起使用Version: '8.0.0-dmr'

有没有解决此问题的方法,该方法不涉及更新JDBC驱动程序?这是回归mysqld吗?


问题答案:

本文讨论了自8.0以来发生的更改。已列出供您参考的要点之一是:

字符集支持

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

character_set_server和character_set_database系统变量的默认值已从 latin1 更改为
utf8mb4

在collat​​ion_server的和collat​​ion_database查看系统变量的缺省值已经从 latin1_swedish_ci
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

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

要将4字节UTF-8字符集与Connector /
J一起使用,请使用配置MySQL服务器character_set_server=utf8mb4,并保留characterEncodingConnector
/ J连接字符串的位置。

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

希望这可以帮助!



 类似资料:
  • 问题内容: 在尝试创建HibernateSession应用程序期间失败,但出现以下异常: 原因:java.sql.SQLException:从服务器收到未知的初始字符集索引‘255’。可以通过’characterEncoding’属性强制设置初始客户端字符集。在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)在com.mys

  • 问题内容: 在尝试创建HibernateSession应用程序期间失败,但出现以下异常: 原因:java.sql.SQLException:从服务器接收到未知的初始字符集索引‘255’。可以通过’characterEncoding’属性强制设置初始客户端字符集。在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)在com.my

  • 问题内容: 使用以下代码建立索引时,由于找不到未知字段解析器而产生错误: 问题答案: 广场外面,而不是嵌套在- https://www.elastic.co/guide/en/elasticsearch/reference/current/docs- reindex.html

  • 问题内容: 让我们考虑以下情况-“文章”文档中有两个字段- content(string)和views(int)。视图字段未建立索引。views字段包含此文章被阅读了多少次的信息。 来自官方文档: 我们还说过文件是不可变的:它们不能更改,只能替换。更新API必须遵守相同的规则。从外部看,似乎我们正在部分更新文档。但是,在内部,更新API仅管理与我们已经描述过的相同的检索- 更改-重新索引过程。 但

  • 我试图修改build.sbt文件,以添加IntelliJ IDEA中的scalatest依赖项。控制台中没有错误日志,但我得到了一个。我怎么解决这个?多谢! 这是我用来添加依赖项的行:

  • 鉴于此示例: 我想得到那些索引,其中col1: 预期结果将是一个向量。