Процедуры в MYSQL очень удобная вещь, однако, при использовании русских (или других символов unicode) можно натолкнуться на неприятность с кодировкой.
И так пример:
Создаем таблицу:
CREATE TABLE `friends` (
`Id` int(11) NOT NULL auto_increment,
`friend_name` varchar(255) default NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Создаем процедуру, согласно пример из документации MySQL:
DELIMITER //
CREATE PROCEDURE `addFriend`(
IN FName VARCHAR(255))
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ”
BEGIN
insert into `friends`(`friend_name`) values (FName);
END;
DELIMITER ;
Это процедура сработает, однако в поле friend_name будут знаки вопроса
DELIMITER //
CREATE PROCEDURE `addFriend`(
IN FName VARCHAR(255) charset utf8 )
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ”
BEGIN
INSERT INTO `friends`(`friend_name`) values (convert(FName USING utf8));
END;
DELIMITER ;
После вызова:
mysql> CALL addFriend('Кто твой друг');
Содержимое поля будет в правильной кодировке.