2013-07-24 46 views
1

编辑:将CHARSET utf8添加到输入参数和输出使其工作。 我发现这个代码段第一个字母转换每个字为大写MySQL中每个单词(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

好像你需要使用SET名字告诉你所使用的字符集的功能。 尝试:

... 
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”。它还指定服务器应使用 将字符集发送回客户端的字符集。

不确定在这种情况下是否需要指定排序规则。

+0

谢谢你的抬头。 我没有添加字符集UTF8输入参数和输出,它现在工作。 'CREATE FUNCTION CAP_FIRST(INPUT VARCHAR(255)CHARSET utf8)' 'RETURNS VARCHAR(255)CHARSET utf8' –

相关问题