Talend и кодировка символов

Я использую talend для переноса данных из старой базы данных в новую базу данных. Старая база данных — PostgreSQL, новая — MySQL.

Но у меня проблема, потому что в старой базе есть такие строки:

id      lft     rgt     rank_id    name_sci
------------------------------------------------------
6530    6137    6138    88         Ocythoë tuberculata
6340    6127    6128    88         Ocythoe tuberculata

Обратите внимание на две точки над e

Так что я

tPsqlInput --> tFilterRow --> tMap --> tMysqlOutput

Однако я получаю сообщение об ошибке: Duplicate entry 'Ocythoe tuberculata' for key 'bio_taxons_name_sci_unique' Если я помещаю компонент tLogRow непосредственно перед вставкой в ​​MySQL, я получаю правильный вывод: Ocythoë tuberculata и Ocythoe tuberculata;

Я попытался напрямую вставить в базу данных:

into bio_taxons (name_sci, created_by, taxonomic_rank_id ) values ('Ocythoë', 1, 10);

И он работает и правильно вставляет это e с точками, и когда я делаю SELECT, он показывает, что он успешно вставил строку выше.

А вот из таленда почему-то заменяет ë (e с двумя точками) на обычное e (без точек).

И я не знаю, как это решить. Я попытался отредактировать соединение MySQL, но ничего не работает:

Вот текущая строка подключения mysql:

jdbc:mysql://:3306/fis?noDatetimeStringSync=true&characterEncoding=Cp1252

Я пробовал со значениями "utf8", "utf-8", "latin1" "utf8mb4", но ничего из этого не сработало...

Также в mysql:

mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| latin1                   | latin1_swedish_ci    |
+--------------------------+----------------------+

person clzola    schedule 13.03.2018    source источник


Ответы (1)


Я рекомендую использовать набор символов utf8 и соответствующую сортировку по всем направлениям, чтобы вы могли разместить каждый символ (если вам также нужны смайлики, перейдите на utf8mb4).

Чтобы преобразовать вашу базу данных в UTF8:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci

Вам также может потребоваться изменить кодировку сервера, если она еще не находится в utf8. Проверьте это с помощью:

SHOW VARIABLES WHERE variable_name LIKE 'char%'

Затем укажите драйверу JDBC использовать кодировку utf8. Ваша строка подключения становится:

jdbc:mysql://:3306/fis?noDatetimeStringSync=true&useUnicode=true&characterEncoding=utf-8
person Ibrahim Mezouar    schedule 13.03.2018
comment
Я только выполнил ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci и изменил строку подключения JDBC, и это работает, большое спасибо - person clzola; 16.03.2018
comment
Я рад, что был полезен ;) - person Ibrahim Mezouar; 16.03.2018
comment
Эй, проблема в вопросе решена, но есть еще одна, она меняет букву č на ?, но компонент tLogRow показывает правильную строку в выводе... - person clzola; 20.03.2018
comment
Мне ужасно жаль, что я пропустил ваш комментарий; ты смог решить свою проблему? - person Ibrahim Mezouar; 05.04.2018
comment
да, это была проблема с моей строкой подключения, я как-то изменил ее на стандартную xD - person clzola; 06.04.2018
comment
Хорошо, я рад ;) - person Ibrahim Mezouar; 06.04.2018