Вы правы, правильный путь - это исправить вашу базу данных.Поверьте мне, я только что прошел это (чтобы исправить установку solr, как ни странно), и чем раньше вы сможете это исправить, тем меньше это причинит вам боль.
Есть два способа исправить ваши данные, хранящиеся внеправильная кодировка:
mysqldump
для всех данных в качестве латиницы 1 (--default-character-set=latin1
), измените определения таблиц на CHARACTER SET=utf8
вместо latin
, а затем повторно импортируйте дамп.
Выполнить два оператора alter для каждого неправильно закодированного столбца
ALTER table MODIFY columns BINARY
ALTER TABLE MODIFY column VARCHAR(255) CHARSET utf8
, изменив значение на BINARYВо-первых, вы можете обмануть MySQL, чтобы не запускать преобразование latin1 => utf8, которое, в вашем случае, дважды кодировало бы и сломало ваши данные.
Если ваша БД велика, 1будет быстрее, чем 2.
Сразу после этого просто сконфигурируйте ваше PHP-приложение для связи с MySQL, используя utf8.Это можно сделать, отправив SET NAMES utf8
в качестве первого запроса каждого соединения.Если PHP уже отправляет данные utf8 в MySQL, это все, что вам нужно сделать.
Если после этого фантастического и подробного ответа вы все еще ищете хак ... Попробуйте настроить JDBC наподключитесь как UTF8, но посмотрите, есть ли способ заставить его отправить предварительную команду, прежде чем она выполнит какую-либо работу.
Если вы выполните эту команду: SET NAMES latin1
, то теоретически Solr должен подключиться как UTF8 и обработатьданные, поступающие из соединения как UTF8, но MySQL будет рассматривать соединение как соединение latin1, а не преобразовывать любые данные, поступающие из ваших столбцов latin1.