2013-07-24 45 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' –

相關問題