Проблемы с арабскими символами в базе данных MySQL при использовании Java

0

У меня возникли проблемы с сопоставлением арабских символов в базе данных MySQL с использованием Java.

Я использую utf8 для всех моих таблиц и моей базы данных. Вот несколько скриншотов из Mysql Workbench:

Изображение 174551

а также

Изображение 174551

Строка, которую я пыталась сопоставить, - это: عماد

Стоит отметить, что арабский язык кодируется более чем на 2 байта, поэтому это явно не проблема регулярного utf8, который не может обрабатывать арабский язык.

Код для подключения к базе данных:

String url = "jdbc:mysql://127.0.0.1:3306/mydatabase";
String user = "root";
String passwd = ".........";
String unicode= "?useUnicode=yes&characterEncoding=UTF-8";

setConnection((Connection) DriverManager.getConnection(url+unicode, user, passwd));

Код для вставки значения:

query3 = "INSERT INTO keyword (idkeyword, keyword) VALUES ("+keyWord.getId()+",'عماد')";
Statement state7 = (Statement) connection.createStatement();
state7.executeUpdate(query3);

Исключение, которое я получаю:

java.sql.SQLException: Incorrect string value: '\xD8\xB9\xD9\x85\xD8\xA7...' for column 'keyword' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480)
at controller.DataBaseAccess.saveProject(DataBaseAccess.java:285)

Вся помощь очень ценится!

  • 0
    Попробуйте сделать так, чтобы арабский текст не помещался непосредственно в файл Java, а загружался из текстового файла UTF-8. Эта ошибка выглядит так, как будто вы компилируете свой файл .java, как если бы он был закодирован как latin-1, когда он действительно закодирован как utf-8 Если это так, то вам нужно найти, как настроить вашу среду для компиляции файлов, закодированных в utf-8. Но сначала нам нужно установить, что это настоящая проблема.
  • 0
    текст вводится пользователем через JTextField
Теги:
mysql-workbench

1 ответ

2
Лучший ответ

Предполагая, что вы используете Java 8 или выше, вы можете использовать Base64 для кодирования арабской строки и сохранения ее в базе данных. Это предотвратило бы многие другие будущие ошибки с разными типами строк на разных языках. При чтении значения из базы данных вы просто декодируете его в Base64.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню