кодировка в mysql jdbc
От: oror7  
Дата: 24.04.10 14:17
Оценка:
на сервере целевая таблица в cp1251
CREATE TABLE `sjf`.`rubric` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(64) NOT NULL,
  `titul` VARCHAR(512) NOT NULL,
  `valid` BOOLEAN NOT NULL,
  `ref` INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY (`id`) 
)
ENGINE = InnoDB
CHARACTER SET cp1251 COLLATE cp1251_general_ci;

в еклипсовой консоли кодировка тоже cp1251
следующий код почему-то выводит знаки вопросов вместо текста
Class.forName( "com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/sjf", "root", "qqqqqq");
Statement st = con.createStatement();
st.executeUpdate( "insert into groupx( name, titul, valid) values( 'фыва', 'фыва', true);");
ResultSet rs = st.executeQuery( "select * from groupx;");
while( rs.next()){
    System.out.println( rs.getString( 2));
                
            }

а если в нём добавить параметр кодировки characterEncoding
Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/sjf?characterEncoding=cp1251", "root", "qqqqqq");

то ловим эксептион
java.sql.SQLException: Incorrect string value: '\xF4\xFB\xE2\xE0' for column 'name' at row 1


окружение
vista sp1
jdk 1.6
mysql 5.1.31
mysql connector 5.1.8

27.04.10 10:30: Перенесено модератором из 'Java' — Blazkowicz
Re: кодировка в mysql jdbc
От: Blazkowicz Россия  
Дата: 26.04.10 07:09
Оценка:
Здравствуйте, oror7, Вы писали:

У вас исходники могут быть сохранены в другой кодировке и поэтому строки в кириллице не конвертируются в Cp1251.
Re[2]: кодировка в mysql jdbc
От: oror7  
Дата: 26.04.10 14:14
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, oror7, Вы писали:


B>У вас исходники могут быть сохранены в другой кодировке и поэтому строки в кириллице не конвертируются в Cp1251.


System.out.println( System.getProperties());

......
sun.jnu.encoding=Cp1251
file.encoding.pkg=sun.io
user.country=RU
file.encoding=Cp1251
user.language=ru
sun.io.unicode.encoding=UnicodeLittle
......


тот-же самый код для PostgreSQL( таблица идентична мускульной) работает идеально
               /*String drvClass= "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost/sjf";
        String user = "root";
        String pass = "qqqqqq";*/
        
        String drvClass= "org.postgresql.Driver";
        String url = "jdbc:postgresql://localhost/sjf";
        String user = "postgres";
        String pass = "qqqqqq";
        
        
            Class.forName( drvClass).newInstance();
            Connection con = DriverManager.getConnection( url, user, pass);
            Statement st = con.createStatement();
            st.executeUpdate( "insert into groupx( name, titul, valid) values( 'фыва', 'фыва', true);");
            
            ResultSet rs = st.executeQuery( "select * from groupx;");
            while( rs.next()){
                System.out.println( rs.getString( 2) + "\t" + rs.getString( 3));
                
            }
            
            System.out.println( "Ok");

пробывал и так

                /*String drvClass= "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost/sjf";
        String user = "root";
        String pass = "qqqqqq";*/
        
        String drvClass= "org.postgresql.Driver";
        String url = "jdbc:postgresql://localhost/sjf";
        String user = "postgres";
        String pass = "qqqqqq";
        
            Class.forName( drvClass).newInstance();
            Connection con = DriverManager.getConnection( url, user, pass);
            Statement st = con.createStatement();
            PreparedStatement pst = con.prepareStatement( "insert into groupx( name, titul) values( ?, ?);");
            pst.setString( 1, "фыва");
            pst.setString( 2, "фыва");
            pst.execute();
            ResultSet rs = st.executeQuery( "select * from groupx;");
            while( rs.next()){
                System.out.println( rs.getString( 2) + "\t" + rs.getString( 3));
                
            }

PostgeSQL — Ok
MySQL — те же яйца
Re[3]: кодировка в mysql jdbc
От: and_hom  
Дата: 26.04.10 15:25
Оценка:
попробуйте указать кодировку в урле соединения
Posted via RSDN NNTP Server 2.1 beta
Re[4]: кодировка в mysql jdbc
От: oror7  
Дата: 26.04.10 15:26
Оценка:
Здравствуйте, and_hom, Вы писали:

_>попробуйте указать кодировку в урле соединения

я же в первом посте указывал — нарываемся на эксепт
Re[5]: кодировка в mysql jdbc
От: oror7  
Дата: 26.04.10 16:30
Оценка:
чувствую дело в конфиге сервера...
копаю
если кто подскажет, какой параметр дело закозявил, буду рад
Re[6]: кодировка в mysql jdbc
От: oror7  
Дата: 26.04.10 17:40
Оценка:
в мускуле по дефолту стояла общесерверная кодировка латан1.
заменил на ср1251 и консольный клиент мускла выдал
C:\MySQL5.1\bin>mysql -u root -p
mysql: Character set 'cp1251' is not a compiled character set and is not specifi
ed in the 'C:\mysql\\share\charsets\Index.xml' file

ср1251 не поддерживается.
т.е. как я и думал — косяк в серваке?
но таблица с принудительной кодировкой всё же создаётся..
Re[7]: кодировка в mysql jdbc
От: Protey Россия  
Дата: 27.04.10 04:47
Оценка:
Здравствуйте, oror7, Вы писали:

O>в мускуле по дефолту стояла общесерверная кодировка латан1.

O>заменил на ср1251 и консольный клиент мускла выдал
O>
O>C:\MySQL5.1\bin>mysql -u root -p
O>mysql: Character set 'cp1251' is not a compiled character set and is not specifi
O>ed in the 'C:\mysql\\share\charsets\Index.xml' file
O>

O>ср1251 не поддерживается.
O>т.е. как я и думал — косяк в серваке?
O>но таблица с принудительной кодировкой всё же создаётся..

В конфигурационном файле my.ini проконтролируйте, чтобы директива default-character-set=cp1251 присутствовала в секции [mysqld] и отсутствовала в секции [mysql] и во всех других секциях тоже. Такая ошибка возникает из-за того, что установщик по умолчанию размещает эту директиву в [mysql].
Re[8]: кодировка в mysql jdbc
От: oror7  
Дата: 27.04.10 11:56
Оценка:
Здравствуйте, Protey, Вы писали:

спасибо!
сделал как Вы предложили и консольный клиент нормально работает с кирилицей.
только проблема неправильной трактовки кодировки в JDBC осталась,
а тему уже перенесли сюда
я честно задалбался брутфорсить все возможные и не возможные
сочетания параметров для правильной работы кодировки.
у меня нет обязательного требования использования мускла,
поэтому остановлюсь лучше на PostgeSQL и займусь
более продуктивными делами, чем брутфорс параметров.
если у кого-то тоже возникнет такая проблема
и Вы её полностью решите — постите сюда
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.