编辑:将CHARSET utf8
添加到输入参数和输出使其工作。
我发现这段代码片段可以将每个单词的第一个字母转换为大写
DELIMITER $$
CREATE FUNCTION CAP_FIRST (INPUT VARCHAR(255) CHARSET utf8)
RETURNS VARCHAR(255) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE len INT;
DECLARE i INT;
SET len = CHAR_LENGTH(INPUT);
SET INPUT = LOWER(INPUT);
SET i = 0;
WHILE (i < len) DO
IF (MID(INPUT,i,1) = ' ' OR i = 0) THEN
IF (i < len) THEN
SET INPUT = CONCAT(
LEFT(INPUT,i),
UPPER(MID(INPUT,i + 1,1)),
RIGHT(INPUT,len - i - 1)
);
END IF;
END IF;
SET i = i + 1;
END WHILE;
RETURN INPUT;
END$$
DELIMITER ;
虽然它适用于ascii字符串;它不适用于utf8
和我一样select cap_first('tiếng việt');
;我的结果是Ti?ng Vi?t
。
我的表位于utf8_general_ci
答案 0 :(得分:0)
好像你需要使用SET NAMES告诉函数你正在使用什么字符集。 尝试:
...
SET NAMES utf8 COLLATION utf8_general_ci;
SET len = CHAR_LENGTH(INPUT);
...
手动参考:
来自http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
SET NAMES表示客户端将用于发送SQL的字符集 语句到服务器。因此,SET NAMES'cp1251'告诉服务器, “来自此客户端的未来传入消息是字符集 cp1251。“它还指定了服务器应该使用的字符集 用于将结果发送回客户端。
在这种情况下,不确定是否需要指定排序规则。