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


Автор: aquaserpent 9.9.2005, 17:25
Пытаюсь сохранить в БД строку, содержащую символ "é".
Код
Statement stat;
Connection con;
Class.forName("org.firebirdsql.jdbc.FBDriver").newInstance();
con = DriverManager.getConnection("jdbc:firebirdsql://" + host + "/" + dbName + "?lc_ctype=UNICODE_FSS", userName, pwd);
con.setAutoCommit(false);
stat = con.createStatement();
int rowCount = stat.executeUpdate(insertStr);
stat.close();
con.commit();

В дебагере символ показывается правильно. А в БД он сохраняется неправильно (при последующем чтении из БД он отображается квадратиком).

Пытаюсь применить
Код
new String("é".getBytes(), "UTF-8")

Тогда сохраняется "?".
Как записать в БД этот долбаный сивол правильно?

Сервер Firebird 1.5.0.
Использую Jaybird FirebirdSQL-1.5.5JDK_1.4.

Автор: AntonSaburov 9.9.2005, 18:03
Так может сами настройки SQL посмотреть ?

Автор: aquaserpent 9.9.2005, 18:07
А что значит "настройки SQL"? Если имеется в виду создание базы, то
Код

CREATE DATABASE '......'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET UNICODE_FSS;

Автор: LSD 9.9.2005, 19:45
Цитата(aquaserpent @ 9.9.2005, 18:25)
В дебагере символ показывается правильно. А в БД он сохраняется неправильно (при последующем чтении из БД он отображается квадратиком).

А чем читаешь? Может просто приложение не поддерживает unicode, и соответсвенно не может отобразить данный символ?
Попробуй так:
Код
Class.forName("org.firebirdsql.jdbc.FBDriver");
Connection con = DriverManager.getConnection(<URL>, <USER>, <PASSWORD>);  
con.setAutoCommit(false);
Statement stat = con.createStatement();
stat.executeUpdate("insert into char_table values ('\u00F0')");
ResultSet rs = stat.executeQuery("select * from char_table");
rs.next();
System.out.println( (int) rs.getString(1).charAt(0));
rs.close();
stat.close(); 
con.rollback();
con.close();

Если все ОК, то должен вывести 204.

Цитата(aquaserpent @ 9.9.2005, 18:25)
Пытаюсь применить
Код
new String("é".getBytes(), "UTF-8")

Тогда сохраняется "?".
Как записать в БД этот долбаный сивол правильно?

Тут как раз ничего удивительного getBytes() возвращает массив байт со строкой в текущей системной кодировке (для винды это Cp1251) а декодировать ты пытаешься как строку в UTF-8.

Автор: aquaserpent 9.9.2005, 20:54
Цитата
Если все ОК, то должен вывести 204.

Вывело 116.
А дебаггер вообще показывает '\u00F0' = (char)'\u0000'...

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