programing

알 수 없는 초기 문자 집합 인덱스 '255'가 서버에서 수신됨

powerit 2023. 9. 25. 23:09
반응형

알 수 없는 초기 문자 집합 인덱스 '255'가 서버에서 수신됨

최대 절전 모드 세션을 생성하는 동안 다음 예외가 발생하고 실패합니다.

발생 원인: java.sql.SQL 예외:알 수 없는 초기 문자 집합 인덱스 '255'가 서버에서 수신되었습니다.초기 클라이언트 문자 집합은 'characterEncoding' 속성을 통해 강제로 설정할 수 있습니다.com. mysql bc. jd bc에서.SQError.createSQcom.mysql.jdbc에서 Lexception(SQError.java:1055).SQError.createSQcom.mysql.jdbc에서 Lexception(SQError.java:956).SQError.createSQLexception(SQError.java:926)

여기서 한 가지 가능한 해결책을 찾았지만 안타깝게도 DB 서버에 접근할 수 없어 구성을 변경할 수 없습니다.DB 서버 변경에 대해 제안된 솔루션이 제공되었고, 제 경우에는 그러한 접근 권한이 없으므로 중복이 아님을 유의하시기 바랍니다.

고객측에서 이 문제를 해결할 수 있는 기회가 있습니까?아래에서 제가 session을 작성하는 pom.xml 파일과 java 코드를 찾을 수 있습니다.

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }
}

그리고 나의 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    ...
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.5.Final</version>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project> 

일부 추가 조사 결과 MySQL v.8.0에서 수행된 변경 사항에서 문제가 발생한 것으로 나타났습니다.

문자 집합 지원

중요한 변경 사항:기본 문자 집합이 latin1에서 utf8mb4로 변경되었습니다.이러한 시스템 변수는 다음과 같은 영향을 받습니다.

character_set_server 및 character_set_database 시스템 변수의 기본값이 latin1에서 utf8mb4로 변경되었습니다.

collation_server 및 collation_database 시스템 변수의 기본값이 latin1_swedish_ci에서 utf8mb4_0900_ai_ci로 변경되었습니다.

이 사항은 새 의 mysql-connector-java 에서되었으며 MySQL 를 가 없습니다.그래서 에서 바꿉니다.5.1.6.5.1.44문제를 해결합니다.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>

URL 아래 사용자, 저에게 적합합니다.

url=jdbc:mysql://localhost:3306/hybrisdb?characterEncoding=latin1&useConfigs=maxPerformance

이거 나한테 잘 맞고 너도 이거 먹어봐 :)

url="jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8"

이거 나한테 효과가 있어요!

 <property name="JDBC.ConnectionURL"  value="jdbc:mysql://localhost:3306/empdemo?characterEncoding=utf8"></property>

이 아래의 변화는 나에게 효과가 있었습니다.

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.44</version>
    </dependency>

이와 관련하여

    @Bean
@Profile("dev")
public DataSource dataSourceDev() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setUsername("root");
    dataSource.setPassword("password");
    dataSource.setUrl("jdbc:mysql://localhost:3306/<yourdatabasehere>");
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    return dataSource;
}

같은 문제에 직면하고 있었습니다.그래서 커넥터 버전(8.0.18)을 업데이트했더니 해결되었습니다.

내 URL에 이 내용을 추가하는 것이 도움이 되었습니다.

useUnicode=true&character_set_server=utf8mb4&useLegacyDatetimeCode=false

이로써 문제는 완전히 해결되었습니다.

아래 url:-를 사용합니다.

url = "jdbc:mysql://localhost:3306/dbName?characterEncoding=latin1&useConfigs=maxPerformance","root","password" ```

자바 8 클라이언트 프로그램과 연결 중에 mysql version 8.0.11에 대해서도 같은 문제가 발생하였습니다.해결책으로 mysql 공식 사이트에서 최신 커넥터를 다운받았습니다.아래에 링크를 언급했습니다: https://dev.mysql.com/downloads/connector/j/

운영 체제로 Platform independent를 선택하고 zip 아카이브를 다운로드합니다.빌드 경로에 사용 가능한 항아리를 추가합니다(외부 항아리로 추가).

이것이 당신의 문제를 해결해 주기를 바랍니다 :)

이 커넥터가 필요합니다: Connector\J 5.1 드라이버.

이것이 호환 커넥터입니다.

hibernate.xml에 이 속성을 입력합니다.

<property name="hibernate.connection.characterEncoding">utf8</property>   

그리고 당신의 mysql 커넥터를 에 업데이트 합니다.

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>

이 문제를 해결하기 위해 드라이버 클래스 이름을 아래 spring과 같이 변경합니다. datasource.driver-class-name=com. mysql. cj. jdbc.드라이버 이것은 mysql 서버 8.0.16과 mysql 커넥터 8.0.16에서 나에게 잘 작동합니다.

`spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.jpa.hibernate.ddl-auto=create
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect` 

초기 클라이언트 문자 집합은 'characterEncoding' 속성을 통해 강제로 설정해야 한다고 생각합니다.
그래서 저에겐 효과가 있었습니다.

jdbc:mysql://localhost:3306/bookmanagersystem?characterEncoding=latin1&useConfigs=maxPerformance

hibernate.cfg.xml 파일에서 편집한 후 동일한 오류가 발생했습니다.

<property name="connection.url">jdbc:mysql://localhost:3306/dbName?characterEncoding=utf8</property>

같은 문제가 있었습니다. MySql이 버전 5에서 8.0.34로 업그레이드되었지만 문제는 내 자바 코드 기반이 1.6이라는 것이었습니다. 둘 다에서 작동할 수 있는 올바른 버전을 찾기 위해 많은 어려움을 겪었고 아래 솔루션이 나에게 효과가 있다는 것을 발견했습니다.

MySql 커넥터 = mysql- connector- java-5.1.16

연결 = jdbc:mysql://localhost:3306/somedb?문자 인코딩 = latin1&usesSSL=

언급URL : https://stackoverflow.com/questions/50855622/unknown-initial-character-set-index-255-received-from-server

반응형