2012-06-26 113 views
2

我遇到了土耳其字符問題,正如我在標題中提到的。我創建MySQL的函數:土耳其字符編碼與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 [email protected] 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)) 

正如你所看到的「你好」是「你好」無處不在。

在我的方案中,每個排序規則都是utf8_turkish_ci。 編輯:我注意到我的問題不包括一個問題。所以這裏是:我如何讓MySQL相信我發送比它認爲更大的字符串

回答

3

我假設你從PHP發送這些查詢。我可以說因爲你是我。

顯然,'utf8_turkish_ci'排序規則可以解碼亂碼utf8代碼,但不能解碼純正的土耳其文字符。改變header('Content-Type: text/html; charset=utf8');的PHP文件編碼,你可以克服這個問題。

+3

哇感謝它像魔術一樣工作。 – interlude

+1

嘆......讓我笑,雖然哈哈 – Brendan

0

我一直在使用記事本++文本編輯器,並有同樣的問題。 (儘管有更高的解決方案) 在編碼選項卡上,選擇的代碼爲​​UTF-8,我選擇它並保存該文件。我把代碼發送到服務器後,它的作品:)