Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
JDBC, MySQL 4.1.8 & cp1251 (Виктор) 07/01/2005 - 13:14:18
      Re: Illegal mix of collations (Виктор) 07/01/2005 - 13:18:33
      Re: JDBC, MySQL 4.1.8 & cp1251 (Кирилл) 11/01/2005 - 01:28:15
      Re: useUnicode=true&characterEncoding=cp1251 (Виктор) 12/01/2005 - 09:36:01
      Re: Зарегистрировал (Виктор) 01/02/2005 - 14:00:43

> Original message text:
> From: Виктор - 07/01/2005 - 13:14:18
> Subject:JDBC, MySQL 4.1.8 & cp1251
> -----------------
> Здравствуйте, уважаемые!
>
> Хочу поднять вопрос о корректности работы JDBC-драйвера (Connector/J версии 3.1.x) с сервером MySQL (версия 4.1.x) при установленной на сервере кодировке cp1251.
>
> Сразу скажу, что я изначально не мог в это поверить, но как говориться против исходников и отладки не попрешь. В интернете я так и не нашел обсуждения подобного поведения. Может плохо искал?
>
> Ситуация такова:
> 1.MySql 4.1.8 (кодировка cp1251).
> 2.Connector/J версии 3.1.5, 3.1.6 или 3.2.0 (другие не смотрел).
>
> Если верить документации JDBC-драйвер должен сам определять кодировку установленную на сервере по значению переменной «character_set_server». См. Раздел «Character Sets and Unicode»:
>
> «The character encoding between client and server is automatically detected upon connection. The encoding used by the driver is specified on the server via the configuration variable 'character_set' for server versions older than 4.1.0 and 'character_set_server' for server versions 4.1.0 and newer. See the "Server Character Set and Collation" section in the MySQL server manual for more information.»
>
> При попытке соединения JDBC драйвер выдает следующее:
>
> 7 Connect root@192.168.1.120 on test
> 7 Query SET NAMES latin1
> 7 Query SET character_set_results = NULL
> 7 Query SHOW VARIABLES
> 7 Query SHOW COLLATION
> 7 Query SET autocommit=1
>
> Я стал разбираться откуда берется «SET NAMES latin1» и нашел следующее:
>
> 1.В методе doHandshake (com.mysql.jdbc.MysqlIO) сервер передает клиенту код кодировки serverCharsetIndex = 51. Это есть правильно.
> 2.Обрабатывая этот код драйвер использут класс com.mysql.jdbc.CharsetMapping следующим образом CharsetMapping.INDEX_TO_CHARSET[this.io.serverCharsetIndex] и это тоже есть правильно, т.к. код 51 соответствует в INDEX_TO_CHARSET значению «cp1251cias».
> 3.Далее драйвер пытается по значению кодировки «cp1251cias» получить mysqlEncodingName (примерно так mysqlEncodingName = (String) CharsetMapping.JAVA_UC_TO_MYSQL_CHARSET_MAP.get(getEncoding().toUpperCase(Locale.ENGLISH));)
> 4.Вот тут проблема CharsetMapping.JAVA_UC_TO_MYSQL_CHARSET_MAP не содержит «cp1251cias»!
>
> Как такое может быть? Это что недоработка? Из версии в версию? Включая релиз? При попустительстве русскоязычного сообщества? Или я чего не понимаю? Или никто не работает с cp1251? И собственно, что за cp1251cias? Зачем так сложно? Или просто начали и не успели дописать?
>
> Решается все просто:
>
> Добавляем в CharsetMapping.java строку
>
> tempMap.put("cp1251cias", "Cp1251");
>
> и все начинает работать правильно. Пропатченный JAR у меня есть. Да любой это и сам может сделать.
>
> Кто что скажет?
> Или я не туда? :)
>


From: Виктор - 07/01/2005 - 13:18:33
Subject:Illegal mix of collations
-----------------
Ошибки типа "Illegal mix of collations" в приложениях - это одно из следствий описанного мной выше.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
19859



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |