Я получаю следующее сообщение об ошибке из приложения Java/Spring/Hibernate, когда он пытается выполнить подготовленное заявление, в базе данных MySQL:Где находится "latin1_german1_ci" сортировка?
Caused by: java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (latin1_german1_ci,COERCIBLE) for operation '='
ЗЕЬЕСТ, который генерирует это (как показано в котом журнал) является:
SELECT s.* FROM score_items s where
s.s_score_id_l=299 and
(s.p_is_plu_b = 'F') and
isTestProduct(s.p_upc_st) = 'N' and
v_is_complete_b='T'
order by s.nc_name_st, s.p_upc_st
сопоставление таблицы в команде show table status
является:
utf8_general_ci
Сопоставление для всех полей char, varchar и text «utf8_general_ci
». Это значение null для полей bigint, int и datetime.
сверка База данных latin1_swedish_ci
, выдаваемое командой:
show variables like "collation_database";
Edit: Я был в состоянии успешно запустить это с моей локальной машине с помощью Eclipse,/STS и экземпляр Tomcat 6. Локальный процесс считывает из той же базы данных, что и процесс на производственном сервере, который сгенерировал ошибку. Сервер, на котором возникает ошибка, является экземпляром Tomcat 7. является сервером Amazon Linux.
Редактировать 2: Я также смог успешно запустить отчет, когда я запустил его из нашей среды QA, с оператором JDBC в server.xml reset, чтобы указать на производственную базу данных. QA, по сути, является зеркалом производственной среды, и некоторые из них работают. Следует также отметить, что в прошлом месяце я видел аналогичную ошибку, но она исчезла, когда я повторно запустил отчет. Наконец, я не уверен, почему это изменило бы ситуацию, но запрашиваемая таблица огромна: более 7 миллионов строк и, вероятно, 100 полей в строке.
Редактировать 3: На основании комментариев Тени я обнаружил, что набор символов «latin1» был указан в тестовой функции. Я изменил это на utf8 и надеюсь, что это решит проблему.
Как узнать, какое поле "latin1_german1_ci
"?
Почему сравнение с использованием «latin1_swedish_ci
», когда таблица и поля являются либо "utf8_general_ci
или нулем?
Может проблема быть связана с функцией набора символов, и если да, то как я могу определить, какой набор символов/сортировок он использует?
Как я сузить, какое поле/функция вызывает проблему?
Спасибо, это очень хорошая информация. Я все еще работаю над этим. Очень странно, что он работает как с моей машиной, так и со средой QA, когда указывается на prod db (см. Мое второе редактирование выше). –
Вот почему я считаю, что проблема связана со связью соединений. Вы можете указать его в строке подключения. – Shadow
Я, наконец, отказался от призрака и только что перезапустил приложение, и оно сработало. Понятия не имею почему. благодаря! –