Задавайте вопросы, мы ответим
Вы не зашли.
есть ХП :
PROCEDURE test.proc(IN Param1 VARCHAR(255))
BEGIN
END
при вызове из java грязно ругается если во входном параметре будут русские буквы
если в подключении указать ("Character Set", "AUTO") то не ругается , но ри занесении данных из парметра в таблицу , в таблице отображаются вопросы вместо всех буковок
Неактивен
таки не помогает
использую 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)
Неактивен
Это отдельная команда, ее надо выполнять после подключения к базе и
до того, как будете выполнять другие запросы.
К слову сказать, если Вы создавали процедуру в latin1, то все Ваши строки
тоже будут преобразовываться в latin1. Посмотреть можно как-то так:
SELECT CHARACTER_SET_CLIENT
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME='proc';
Неактивен
Это отдельная команда, ее надо выполнять после подключения к базе и
до того, как будете выполнять другие запросы.
где и как выполить её в применении к коду java?
и как запустить
SELECT CHARACTER_SET_CLIENT
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME='proc';
в хранимке?
консолью непользуюсь, поэтому не знаю...
Неактивен
Что-то я не пойму, кто из нас Java-программист
Общение любого приложения с MySQL происходит методом «клиент посылает запрос,
а сервер отвечает». Вам нужно послать запрос. Например, так:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql?user=root");
PreparedStatement stmt = conn.prepareStatement("SET NAMES cp1251");
stmt.executeQuery();
Запрос «посмотреть кодировку процедуры» можно выполнить из любого клиента.
Вы можете написать свое приложение, а можете воспользоваться готовым.
Неактивен
Отредактированно assan (25.08.2010 16:55:56)
Неактивен
Значит, все-таки, кодировка процедуры — пересоздайте ее в нормальной кодировке.
Неактивен
ещё б знаить как это : пересоздать в нормальной кодировке...
использую dbForge for MySQL
там про кодировку для хранимок ничего нет..
только кодировка выбирается только при подключении.
Неактивен
Кодировка у хранимой процедуры будет та, которую имеет ваш клиент при её создании.
Неактивен