Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Необычная проблема с кодировками БД


Автор: Filin88 28.7.2008, 15:10
Проблема с кириллицей в БД (mysql-connector-java-5.0.4-bin.jar). По умолчанию данные в ней хранятся в кодировке UTF-8 в секции Latin-1. Программа заносит в БД данные в кодировке UTF-8 НО В КИРИЛЛИЧЕСКУЮ СЕКЦИЮ. Если через EMS данные заносить все нормально, кирилица отображается, но программно ее не занести. Нужно чтобы данные заносились в секцию Latin-1. Как это можно сделать?  smile 

Автор: sandello 29.7.2008, 08:30
Что есть "секция" latin-1?
Какие-то параметры соединения устанавливал?

Автор: mbasil 29.7.2008, 11:01
Попробуйте предварительно установить американскую локаль по по умолчанию.
Код

Locale currentLocale = Locale.getDefault();
Locale.setDefault( Locale.US );
...
Locale.setDefault( currentLocale );

Автор: Filin88 29.7.2008, 12:55
Цитата(sandello @ 29.7.2008,  08:30)
Что есть "секция" latin-1?
Какие-то параметры соединения устанавливал?

Откройте таблицу символов, (шрифт любой) выберите в группировке "Диапозпны Юникода". Вот там интересны 2 группы: "Латиница" и "Кириллица". Прога заносит в секцию "Кириллица", а должна в "Латиницу".

Добавлено через 3 минуты и 5 секунд
Цитата(mbasil @ 29.7.2008,  11:01)
Попробуйте предварительно установить американскую локаль по по умолчанию.

Не помогло. Здесь нужно конкретно разобраться с кодами символов

Автор: Filin88 30.7.2008, 07:51
Побившись денек головой ап стену, я таки нашел выход, и все оказалось гораздо проще, чем думалось. Оказывается достаточно перекодиовать строку в формат базы, перед ее занесением в БД. Делается это так:

Код

new String( "Данные типа СТРЫНХ".getBytes("Cp1251"), "latin1") //Строка будет перекодирована из Cp1251 в latin1


 smile  smile  smile 

Автор: Aprol 7.3.2009, 12:00
промазал сорри

Автор: math64 7.3.2009, 20:29
Попровуй соединяться с mysql так:
Код

String encoding = "Cp1251";
String url = "jdbc:mysql://" +host + "/" + dbName + "?useUnicode=true&characterEncoding=" + encoding;
Connection c = DriverManager.getConnection(url, user, password);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)