Такая проблема — когда вызываю хранимую процедуру и передаю ей параметром строку с кириллицей, запросы внутри ХП не выполняются, как если бы я попытался выполнить запрос без указания кодировки строки. Как иллюстрация — лог консольного клиента:
mysql> insert into servers (server_name) values ('тест'); -- тестовый запрос - неудача
ERROR 1406 (22001): Data too long for column 'server_name' at row 1
mysql> insert into servers (server_name) values (_cp1251'тест'); -- то же, явно указываем кодировку строки - норма
Query OK, 1 row affected (0.03 sec)
mysql> select log_server(_cp1251'тест'); -- пытаемся вызвать ХП таким же образом
ERROR 1406 (22001): Data too long for column 'pSERVER_NAME' at row 1
mysql>
Что сделать с ХП (базой, настройками сервера), чтобы избежать такой ситуации?
для справки — структура данных:
CREATE TABLE `servers` (
`server_id` int(11) NOT NULL auto_increment,
`server_name` varchar(20) NOT NULL,
PRIMARY KEY (`server_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 -- пробовал cp1251, не влияет
CREATE FUNCTION `LOG_SERVER`(
pSERVER_NAME VARCHAR(20)
) RETURNS int(11)
BEGIN
INSERT INTO SERVERS (SERVER_NAME) VALUES (pSERVER_NAME);
RETURN LAST_INSERT_ID();
END
Здравствуйте, RWolf, Вы писали:
RW>Такая проблема — когда вызываю хранимую процедуру и передаю ей параметром строку с кириллицей, запросы внутри ХП не выполняются, как если бы я попытался выполнить запрос без указания кодировки строки. Как иллюстрация — лог консольного клиента:
RW>mysql>> insert into servers (server_name) values ('тест'); -- тестовый запрос - неудача
RW>ERROR 1406 (22001): Data too long for column 'server_name' at row 1
mysql>> insert into servers (server_name) values (_cp1251'тест'); -- то же, явно указываем кодировку строки - норма
RW>Query OK, 1 row affected (0.03 sec)
mysql>> select log_server(_cp1251'тест'); -- пытаемся вызвать ХП таким же образом
RW>ERROR 1406 (22001): Data too long for column 'pSERVER_NAME' at row 1
mysql>>
RW>
RW>Что сделать с ХП (базой, настройками сервера), чтобы избежать такой ситуации?
Попробуй команду 'set character set cp1251;' после подключения к базе данных