forum.bitel.ru http://forum.bitel.ru/ |
|
Illegal mix of collation в истории параметра http://forum.bitel.ru/viewtopic.php?f=22&t=11891 |
Страница 1 из 1 |
Автор: | vkulakov [ 23 авг 2016, 19:16 ] |
Заголовок сообщения: | Illegal mix of collation в истории параметра |
При просмотре истории спискового параметра на договоре выскочила такая ошибка: Вложение: В логах сервера такое: Код: 08-23/16:10:17 ERROR [http-bio-127.0.0.1-8080-exec-9] CommonExecutor - java.sql.SQLException: Illegal mix of collations for operation 'concat' ru.bitel.bgbilling.common.BGException: java.sql.SQLException: Illegal mix of collations for operation 'concat' at bitel.billing.server.contract.bean.ContractParameterManager.getParameterHistory(ContractParameterManager.java:2712) at bitel.billing.server.contract.action.ActionGetParameterHistory.doAction(ActionGetParameterHistory.java:30) at bitel.billing.server.Executer.doModule(SourceFile:600) at bitel.billing.server.Executer$1.run(SourceFile:199) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at bitel.billing.server.Executer.doPost(SourceFile:193) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at ru.bitel.common.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:54) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.sql.SQLException: Illegal mix of collations for operation 'concat' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2838) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2212) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at bitel.billing.server.contract.bean.ContractParameterManager.getParameterHistory(ContractParameterManager.java:2682) С обновленным биллингом работаем уже месяц и никаких проблем с кодировкой замечено не было. |
Автор: | dimOn [ 23 авг 2016, 19:39 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
всё из about |
Автор: | vkulakov [ 23 авг 2016, 19:52 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Код: Информация о версии:
Клиент: вер. 6.2.826 / 24.06.2016 16:17:38 os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65 Сервер: вер. 6.2.1077 / 06.07.2016 19:20:23 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91 assist: вер. 6.2.86 / 27.04.2016 13:58:46 bill: вер. 6.2.87 / 10.06.2016 13:28:18 card: вер. 6.2.39 / 26.05.2016 14:50:45 dialup: вер. 6.2.315 / 01.03.2016 00:17:59 email: вер. 6.2.176 / 01.03.2016 00:18:32 inet: вер. 6.2.668 / 04.07.2016 16:59:27 ipn: вер. 6.2.259 / 06.07.2016 19:29:33 mps: вер. 6.2.210 / 06.07.2016 19:00:12 npay: вер. 6.2.195 / 24.06.2016 16:25:14 reports: вер. 6.2.209 / 06.06.2016 12:43:49 rscm: вер. 6.2.177 / 10.06.2016 13:40:20 ru.bitel.bgbilling.plugins.bonus: вер. 6.2.117 / 06.07.2016 18:56:27 ru.bitel.bgbilling.plugins.crm: вер. 6.2.192 / 01.06.2016 00:38:35 ru.bitel.bgbilling.plugins.dispatch: вер. 6.2.84 / 24.03.2016 12:20:30 ru.bitel.bgbilling.plugins.helpdesk: вер. 6.2.181 / 14.06.2016 14:50:40 ru.bitel.bgbilling.plugins.organizer: вер. 6.2.71 / 01.03.2016 00:18:34 voiceip: вер. 6.2.190 / 03.03.2016 18:32:27 wm: вер. 6.2.179 / 28.06.2016 22:32:46 Окружение: Клиент: os: Windows 7 amd64, 6.1 java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65 jre home: c:\Program Files\Java\jdk1.8.0_65\jre default tz: 23.08.2016 16:51 MSK +0300 (Europe/Moscow) user tz: 23.08.2016 16:51 MSK +0300 (Europe/Moscow) locale: ru_RU Сервер: os: Linux amd64, 2.6.32-504.23.4.el6.x86_64 java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91 jre home: /opt/jdk1.8.0_91/jre default tz: 23.08.2016 16:51 MSK +0300 (Europe/Moscow) db time: master: 23.08.2016 16:51 MSK db charset: connection: cp1251(cp1251_general_ci), database: cp1251(cp1251_general_ci) locale: en_US uptime: Started: 18.08.2016 18:56:45 Uptime: 4 d 21:54:56 Третьи стороны: Fugue Icons. Copyright © 2011 Yusuke Kamiyamane. All rights reserved. http://p.yusukekamiyamane.com/ Silk icon set. Copyright © Mark James. All rights reserved. http://www.famfamfam.com/lab/icons/silk/ |
Автор: | skn [ 24 авг 2016, 00:00 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
show create table contract_parameter_type_7_log |
Автор: | vkulakov [ 24 авг 2016, 13:01 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Цитата: CREATE TABLE `contract_parameter_type_1_log` (
`cid` int(11) NOT NULL, `pid` int(11) NOT NULL, `val` varchar(255) DEFAULT NULL, `dt_change` datetime NOT NULL, `user_id` int(11) NOT NULL, KEY `cid_pid` (`cid`,`pid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
Автор: | dimOn [ 24 авг 2016, 13:29 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
ну вот там у вас потому что DEFAULT CHARSET=latin1, но почему так получилось - тут сложно сказать. в contract_parameter_type_7_log которую у вас попросили - тоже скорее всего то же самое, просто только с типом параметра 7 делается concat который вызывает эту проблему |
Автор: | dimOn [ 24 авг 2016, 13:33 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
остальные табоицы проверьте, почему на некоторых latin1? у вас раньше была дефолт чарсет на БД такая а потом вы поменяли? |
Автор: | stark [ 24 авг 2016, 13:39 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Код: show table status
|
Автор: | vkulakov [ 24 авг 2016, 14:55 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Код: mysql> SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.tables WHERE table_schema = DATABASE() AND table_collation != 'cp1251_general_ci'; +--------------+-------------------------------+-------------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION | +--------------+-------------------------------+-------------------+ | bgbilling | billing_event_bus | latin1_swedish_ci | | bgbilling | contract_comment_patterns | latin1_swedish_ci | | bgbilling | contract_module | latin1_swedish_ci | | bgbilling | contract_parameter_type_1_log | latin1_swedish_ci | | bgbilling | contract_parameter_type_3_log | latin1_swedish_ci | | bgbilling | contract_parameter_type_4_log | latin1_swedish_ci | | bgbilling | contract_parameter_type_5_log | latin1_swedish_ci | | bgbilling | contract_parameter_type_6_log | latin1_swedish_ci | | bgbilling | contract_parameter_type_7_log | latin1_swedish_ci | | bgbilling | contract_parameter_type_8_log | latin1_swedish_ci | | bgbilling | contract_parameter_type_9 | latin1_swedish_ci | | bgbilling | contract_parameter_type_9_log | latin1_swedish_ci | | bgbilling | contract_pattern_modules | latin1_swedish_ci | | bgbilling | global_script | latin1_swedish_ci | | bgbilling | ip_resource_range_15 | latin1_swedish_ci | | bgbilling | ipn_gate_contract_port_15 | latin1_swedish_ci | | bgbilling | ipn_gate_rule_15 | latin1_swedish_ci | | bgbilling | ipn_gate_vlan_15 | latin1_swedish_ci | | bgbilling | login_parameter_1 | latin1_swedish_ci | | bgbilling | login_parameter_16 | latin1_swedish_ci | | bgbilling | login_parameter_log_1 | latin1_swedish_ci | | bgbilling | payment_robokassa | utf8_general_ci | | bgbilling | register_problem_log | latin1_swedish_ci | | bgbilling | script_lib | latin1_swedish_ci | | bgbilling | sql_patches_history | latin1_swedish_ci | | bgbilling | sql_template | latin1_swedish_ci | | bgbilling | tariff_option | latin1_swedish_ci | +--------------+-------------------------------+-------------------+ Что было раньше и как пришли к текущему состоянию уже неизвестно. |
Автор: | vkulakov [ 24 авг 2016, 20:45 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Как безопасно исправить кодировку таблиц? |
Автор: | skn [ 24 авг 2016, 23:29 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
для одной таблицы, как то так... Код: ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; ну и проверить кодировку базы и при необходимости поменять Код: ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
Автор: | dimOn [ 25 авг 2016, 13:24 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
я скрипт писал и пару баз успешно конвертнул им, где-то здесь был и кто-то исправления там делал, исходная версия на гитхабе есть: https://raw.githubusercontent.com/darkb ... ql2utf8.sh |
Автор: | vkulakov [ 25 авг 2016, 13:54 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Спасибо, буду пробовать. |
Автор: | vkulakov [ 06 сен 2016, 16:42 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Пытаюсь конвертить таким запросом: Код: ALTER TABLE billing_event_bus CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; но реально ничего не изменяется и SHOW CREATE TABLE показывает старую кодировку. В чём может быть проблема? |
Автор: | dimOn [ 06 сен 2016, 16:46 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
а запрос что возвращает? |
Автор: | vkulakov [ 06 сен 2016, 16:53 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Код: MariaDB [dcbilling]> SHOW CREATE TABLE billing_event_bus;
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | billing_event_bus | CREATE TABLE `billing_event_bus` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `event` longblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [dcbilling]> ALTER TABLE billing_event_bus CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [dcbilling]> SHOW CREATE TABLE billing_event_bus; +-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | billing_event_bus | CREATE TABLE `billing_event_bus` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `event` longblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [dcbilling]> |
Автор: | dimOn [ 06 сен 2016, 16:54 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
0 rows affected (0.00 sec) вот так не должно быть вроде как |
Автор: | vkulakov [ 06 сен 2016, 17:32 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Добавил ещё запрос Код: ALTER TABLE billing_event_bus CHARACTER SET cp1251 COLLATE cp1251_general_ci; и всё пошло. Т. е. помимо конвертации нужно ещё и дефолтную кодировку установить. |
Автор: | dimOn [ 06 сен 2016, 17:42 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
хммм, странно |
Автор: | vkulakov [ 07 сен 2016, 13:11 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
dimOn писал(а): хммм, странно Похоже, что дело в MariaDB. Попробовал конвертировать таблицы на тестовом биллинге с MySQL базой и после запроса Код: ALTER TABLE contract_parameter_type_1_log CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; SHOW CREATE TABLE начала сразу показывать правильную кодировку. |
Автор: | ok-2004 [ 07 сен 2016, 13:49 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
Мария становится всё страннее и страннее. За год метания между перконой-ораклом-марией пришёл к выводу , что Мария - конструктор, не более. Засосать в себя все что делается другими, добавить своих красивых наработок и получить на выходе несовместимый со стоковым мускулем даже по командам DML. А теперь по теме ТС: Скрипт от dimOn прекрасен своей каноничностью, если не принимать во внимание изменение типа текстовых данных при такой конвертации. Как отразится на базе БЖБ при работе и обновлениях то , что CHAR/VARCHAR/TEXT/BLOB стали вдруг MEDIUM/LONGTEXT - никому не ведомо. Если у Вас есть возможность "стопорнуть" базу - то самым правильным способом при конвертации будет использовать одну интересную фичу mysqldump при запуске с привилегиями mysql-root. Вот так например можно с cp1251 перейти на utf8: Код: #!/bin/bash mysql -u root -ppassword --skip-column-names -e "SELECT table_name FROM information_schema.tables WHERE table_schema = 'bgbilling';" > /tmp/bgb_tables.txt while read line ; do echo "SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;" > "/tmp/$line" mysqldump -uroot -ppasword \ --max_allowed_packet=100M \ --skip-opt \ --single-transaction \ --flush-logs \ --order-by-primary \ --create-options \ --quick \ --skip-set-charset \ --log-error=/tmp/$line.dump \ --skip-extended-insert \ --default-character-set=utf8 \ bgbilling $line >> /tmp/$line echo "show warnings;SET autocommit=1;" >> "/tmp/$line" done < /tmp/bgb_tables.txt # echo "DROP DATABASE bgbilling;" > /tmp/pre_bgb.sql echo "CREATE DATABASE bgbilling DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;" >> /tmp/pre_bgb.sql # mysql -uroot -ppassword < /tmp/pre_bgb.sql # while read line1 ; do sed -e 's/DEFAULT CHARSET=cp1251/DEFAULT CHARSET utf8 COLLATE utf8_unicode_ci/g' -i /tmp/$line1 mysql -uroot -ppassword -vvv --max_allowed_packet=100M --init-command="SET NAMES utf8" bgbilling < /tmp/$line1 2>&1 > /tmp/$line1.rest done < /tmp/bgb_tables.txt # exit 0 Заодно и примари-индексы перестроите и таблицы дефрагментируете. А повырезав строчки из /tmp/bgb_tables.txt перед запуском обратного процесса - избавитесь от лишних таблиц-логов. |
Автор: | dimOn [ 07 сен 2016, 14:17 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
ну так-то скрипт от dimon делает то же, что делали очень многие при конвертации: просто CONVERT TO CHARACTER итд... |
Автор: | vkulakov [ 07 сен 2016, 14:45 ] |
Заголовок сообщения: | Re: Illegal mix of collation в истории параметра |
ok-2004 писал(а): Как отразится на базе БЖБ при работе и обновлениях то , что CHAR/VARCHAR/TEXT/BLOB стали вдруг MEDIUM/LONGTEXT - никому не ведомо. После конвертации моего небольшого набора таблиц с неправильной кодировкой при работающем биллинге, ничего страшного не произошло. При этом ошибки исчезли и в логе изменения параметров всё стало отображаться правильно (для новых записей, старые так и остались с вопросами). Вариант с дампом всего и вся для такой простой задачи не очень интересен, да и данные из этих таблиц не очень ценны - лежат больше на всякий случай. А переводить базу на utf8 пока не планируем совсем. Тут больше интересно другое - как я мог не заметить раньше проблему с кодировкой таблиц. Ведь историю для некоторых параметров я веду довольно давно и при включении истории всегда проверял, как это всё работает. Подозреваю, что что-то могло поломаться при переходе на MariaDB, который как раз произошёл пару месяцев назад. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |