1

編集: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

4

1 に答える 1

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 である」ことを伝えます。また、結果をクライアントに返すためにサーバーが使用する文字セットも指定します。

この場合、照合を指定する必要があるかどうかはわかりません。

于 2013-07-24T17:59:24.770 に答える