SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.08.2010 09:17:33

assan
Участник
Зарегистрирован: 25.08.2010
Сообщений: 5

Русские буквы во входных параметрах хранимых процедур

есть ХП :
PROCEDURE test.proc(IN Param1 VARCHAR(255))
BEGIN
END
при вызове из java грязно ругается если во входном параметре будут русские буквы

если в подключении  указать ("Character Set", "AUTO") то не ругается , но ри занесении данных из парметра в таблицу , в таблице отображаются вопросы вместо всех буковок

Неактивен

 

#2 25.08.2010 10:10:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Русские буквы во входных параметрах хранимых процедур

Таки FAQ#8.

Неактивен

 

#3 25.08.2010 10:58:34

assan
Участник
Зарегистрирован: 25.08.2010
Сообщений: 5

Re: Русские буквы во входных параметрах хранимых процедур

таки не помогает

использую dbForge for MySQL

пишу в java

        Class.forName("com.mysql.jdbc.Driver");
        Properties connInfo = new Properties();
пробовал различное, в разных комбинациях
//        connInfo.setProperty("characterEncoding", "UTF-8");
//        connInfo.setProperty("charSet", "UTF-8");
//        connInfo.setProperty("SET NAMES", "cp1251");
//        connInfo.setProperty("Character Set", "AUTO");
//        connInfo.setProperty("Character Set", "Cp1251");

        connInfo.setProperty("user", "root");
        connInfo.setProperty("password", "123");

            Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.0.3:3306/test", connInfo);
            java.sql.Statement proc = conn.createStatement();
            proc.executeUpdate("{call proc ('ыы')}");

только при этом connInfo.setProperty("Character Set", "AUTO"); не выдаёт ошибки но вставляет не понятно что
при других он даже не входит в хранимку:
java.sql.SQLException: Incorrect string value: '\xFB\xFB' for column 'Param1' at row 1
для такой хранимке
PROCEDURE test.proc(IN Param1 VARCHAR(255))
BEGIN
END

но если сделать так
proc.executeUpdate("INSERT  INTO test.nom (  name)VALUES('ыыыы'))"
то всё работает как надо, принивает, вставляет, и отображает русские буквы правильно.

в каком месте мне применить <Таки FAQ#8.> ?

Отредактированно assan (25.08.2010 11:04:34)

Неактивен

 

#4 25.08.2010 11:09:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Русские буквы во входных параметрах хранимых процедур

Это отдельная команда, ее надо выполнять после подключения к базе и
до того, как будете выполнять другие запросы.

К слову сказать, если Вы создавали процедуру в latin1, то все Ваши строки
тоже будут преобразовываться в latin1. Посмотреть можно как-то так:
SELECT CHARACTER_SET_CLIENT
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME='proc';

Неактивен

 

#5 25.08.2010 13:14:48

assan
Участник
Зарегистрирован: 25.08.2010
Сообщений: 5

Re: Русские буквы во входных параметрах хранимых процедур

Это отдельная команда, ее надо выполнять после подключения к базе и
до того, как будете выполнять другие запросы.

где и как выполить её в применении к коду java?

и как запустить
SELECT CHARACTER_SET_CLIENT
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME='proc';

в хранимке?
консолью непользуюсь, поэтому не знаю...

Неактивен

 

#6 25.08.2010 13:32:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Русские буквы во входных параметрах хранимых процедур

Что-то я не пойму, кто из нас Java-программист wink

Общение любого приложения с MySQL происходит методом «клиент посылает запрос,
а сервер отвечает». Вам нужно послать запрос. Например, так:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql?user=root");
PreparedStatement stmt = conn.prepareStatement("SET NAMES cp1251");
stmt.executeQuery();

Запрос «посмотреть кодировку процедуры» можно выполнить из любого клиента.
Вы можете написать свое приложение, а можете воспользоваться готовым.

Неактивен

 

#7 25.08.2010 16:55:21

assan
Участник
Зарегистрирован: 25.08.2010
Сообщений: 5

Re: Русские буквы во входных параметрах хранимых процедур

           Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.0.3:3306/test", connInfo);
            java.sql.Statement proc = conn.createStatement();
            PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("SET NAMES cp1251");
            stmt.executeQuery();
            proc.executeUpdate("{call proc ('ыы')}");
 

java.sql.SQLException: Incorrect string value: '\xFB\xFB' for column 'Param1' at row 1

c mysql учусь общаться...

Отредактированно assan (25.08.2010 16:55:56)

Неактивен

 

#8 25.08.2010 17:16:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Русские буквы во входных параметрах хранимых процедур

Значит, все-таки, кодировка процедуры — пересоздайте ее в нормальной кодировке.

Неактивен

 

#9 25.08.2010 17:26:47

assan
Участник
Зарегистрирован: 25.08.2010
Сообщений: 5

Re: Русские буквы во входных параметрах хранимых процедур

ещё б знаить как это : пересоздать в нормальной кодировке...
использую dbForge for MySQL
там про кодировку для хранимок ничего нет..
только кодировка выбирается только при подключении.

Неактивен

 

#10 25.08.2010 17:35:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Русские буквы во входных параметрах хранимых процедур

Кодировка у хранимой процедуры будет та, которую имеет ваш клиент при её создании.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson