2

タイトルで述べたように、トルコ語の文字に問題があります。MySQLで関数を作成しました:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` FUNCTION `ilgiAlaniFunc`(
            idKullanici INT, 
            ilgi_alani_ismi varchar(255) CHARSET utf8 COLLATE utf8_turkish_ci
        ) RETURNS varchar(255) CHARSET utf8 COLLATE utf8_turkish_ci
    READS SQL DATA
    DETERMINISTIC
BEGIN
    -- Function logic here
    DECLARE ret int DEFAULT -1;
    select id Into ret from ilgi_alanlari
        where ilgi_alani_adi=ilgi_alani_ismi  limit 1;
    IF(ret = -1) then
        INSERT INTO ilgi_alanlari(ilgi_alani_adi) values (ilgi_alani_ismi);
        SELECT last_insert_id() into ret;
    END IF;
    insert into kullanici_ilgi_alani(kullanici_id, ilgi_alani_id)
        values (idKullanici, ret);
    RETURN ret;
END

これは私が実行するクエリのダンプです:

111 Connect root@localhost on anketsis_main
111 Query   select ilgiAlaniFunc(43,'kıvılcım')
111 Query   select id Into ret from ilgi_alanlari where ilgi_alani_adi= NAME_CONST('ilgi_alani_ismi',_utf8'k' COLLATE 'utf8_turkish_ci')  limit 1
111 Query   insert into kullanici_ilgi_alani(kullanici_id, ilgi_alani_id) values ( NAME_CONST('idKullanici',43),  NAME_CONST('ret',54))

ここでは、「kıvılcım」が「k」に変わることがわかります。最初のトルコ語の文字の後、MySQLはその後すべてを消去します。

そして、ここに正しいダンプがあります:

120 Query   select ilgiAlaniFunc(44,'Hello')
120 Query   select id Into ret from ilgi_alanlari where ilgi_alani_adi= NAME_CONST('ilgi_alani_ismi',_utf8'Hello' COLLATE 'utf8_turkish_ci')  limit 1
120 Query   INSERT INTO ilgi_alanlari(ilgi_alani_adi) values ( NAME_CONST('ilgi_alani_ismi',_utf8'Hello' COLLATE 'utf8_turkish_ci'))
120 Query   SELECT last_insert_id() into ret
120 Query   insert into kullanici_ilgi_alani(kullanici_id, ilgi_alani_id) values ( NAME_CONST('idKullanici',44),  NAME_CONST('ret',56))

ご覧のとおり、「Hello」はどこでも「Hello」です。

私のスキームでは、すべての照合はutf8_turkish_ciです。編集:私の質問に質問が含まれていないことに気づきました。だからここにあります:MySQLに私が思っているよりも大きな文字列を送信していると信じさせるにはどうすればよいですか?

4

2 に答える 2

4

これらのクエリをPHPから送信していると思います。あなたが私だからと言えます。

どうやら'utf8_turkish_ci'照合は、ぎこちないutf8コードをデコードできますが、プレーンなトルコ語文字はデコードできません。PHPファイルのエンコーディングを変更すると、header('Content-Type: text/html; charset=utf8');この問題を解決できます。

于 2012-06-26T22:17:32.123 に答える
0

私は、notepad ++テキストエディタを使用していて、同じ問題を抱えていました。(上の解決策にもかかわらず)[コーディング]タブで、UTF-8を使用したコードとして選択があり、それを選択してファイルを保存しました。私がサーバーにコードを送った後、それは動作します:)

于 2015-02-10T21:52:58.477 に答える