Java.sql.SQLException: неизвестный индекс начального набора символов '255', полученный от сервера для соединителя 8.0.11

При установке соединения с базой данных MySQL я получаю следующую ошибку

java.sql.SQLException: Unknown initial character set index '255' received from 
server. Initial client character set can be forced via the 'characterEncoding' 
property.

После поиска в Google я узнал, что нам нужно изменить 2 параметра в my.ini или my.cnf.

Я использую MySQL версии 8.0.11, и у меня нет этого файла.

Поэтому я изменил эти параметры с помощью команд SQL:
Обратите внимание, что название и продолжительность - это название столбца в таблице.

ALTER TABLE courses MODIFY name VARCHAR(50) COLLATE utf8_unicode_ci;    
ALTER TABLE courses MODIFY duration VARCHAR(50) COLLATE utf8_unicode_ci;

ALTER TABLE courses MODIFY name VARCHAR(50) CHARACTER SET utf8;
ALTER TABLE courses MODIFY duration VARCHAR(50) CHARACTER SET utf8;

Следовательно, моя таблица выглядит так

Java.sql.SQLException: неизвестный индекс начального набора символов '255', полученный от сервера для соединителя 8.0.11

После этого я перезапустил сервер MySQL, но все еще получаю указанную выше ошибку.

Обратите внимание, что я развертываю свое приложение в tomcat и выполняю вызов rest API, который подключается к базе данных. При подключении к базе данных я получаю указанную выше ошибку.

Вы уверены, что используете Connector / J 8.0.11? Что возвращает connection.getMetaData().getDriverVersion()?

Mark Rotteveel 22.05.2018 22:27

Обратите внимание, что изменение набора символов определенного столбца не повлияет на набор символов соединения. Какие именно два параметра вы обнаружили в конфигурации MySQL, которые нужно изменить? А вы пробовали указать свойство соединения characterEncoding, как это предлагается в сообщении об ошибке?

Mark Rotteveel 22.05.2018 22:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
13
2
39 975
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Похоже, вам нужно загрузить последнюю версию j jar разъема:

http://chillyfacts.com/java-sql-sqlexception-unknown-initial-character-set-index-224-received-server/

Здравствуйте, я использую только последнюю версию j jar-соединителя, т.е. я использую версию 8.0.11

sachin sarangamath 23.05.2018 02:29

В версии 8 изменен набор символов по умолчанию. Когда вы добавляете свой набор символов в URL-адрес подключения, например? Character Encoding = latin1, это может сработать.

Добавлен ?characterEncoding=utf8 в URL.

mrk m 25.07.2020 12:40
Ответ принят как подходящий

Используя интерфейс MySQLWorkbench:

Сначала щелкните в своем соединении ->

После щелчка в файле параметров

И измените значения character-set-server и collation-server на значения ниже:

Обязательно перезапустите сервер mysql, открыв службы и перезапустив сервер mysql.

Не работает у меня

K Rajitha 24.01.2019 06:55

это из-за версии mysql-коннектора, т.е. Версия установки My-sql и версия зависимости не совпадают.

использовать ту же версию для myS

Добавьте файл jar зависимости соединителя в файл POM после перекрестной проверки с вашим сервером MySql версии 8.0.x добавьте эту зависимость, которая у меня работала mysqlmysql-connector-java 8.0.11

Используйте ту же версию MySQL, что и mysql-connector. Если вы используете Tomcat, сохраните коннектор в папке lib в Tomcat.

Вы можете добавить ?characterEncoding=latin1" после строки URL-адреса следующим образом например:

"jdbc:mysql://localhost/yourDB?characterEncoding=latin1";

Это может сработать.

Я использую springboot, liquibase, mysql

У меня есть решение: Эта ошибка возникает только из-за того, что соединитель mysql в зависимости и сервер mysql, который вы устанавливаете, не совпадают (в моем случае я использую соединитель mysql более низкой версии и последний сервер mysql). Так что просто измените объем коннектора mysql на runtime:

знаток

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

Gradle

dependencies {
//... other dependencies
runtimeOnly group:'mysql', name:'mysql-connector-java'
}

Или, если проблема еще не решена, используйте ту же или близкую версию как для сервера mysql, так и для соединителя mysql.

Добавление следующего в строку подключения должно работать:

jdbc:mysql://localhost/yourDB?characterEncoding=latin1;

Просто скачайте последнюю версию jar-файла гибернации с
https://www.javatpoint.com/src/hb/hibernatejar.zip
и файл jar коннектора MySQL от
https://dev.mysql.com/downloads/connector/j/5.1.html

Установив CharacterEnconding, будут работать параметры useUnicode

jdbc: mysql: // localhost: 3306 / dbname? characterEncoding = utf8 & useSSL = false & useUnicode = true "

Совместимая версия mysql-connector-java должна требоваться в соответствии с установленным сервером MySQL. ---> Для моего установленного MySQL Server 8.0 я загружаю mysql-connector-java-8.0.20 в папку SoapUi / bin / ext или путь сборки проекта в eclipse. меня устраивает!!

Используйте версию 5.1.44 mysql-connector-java.

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

Как я это исправил: Добавьте characterEncoding = utf8 в конец строки подключения jdbc

Например. connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/photo_app?" + "user=root&password=root&characterEncoding=utf8");

Другие вопросы по теме