2012-06-26 4 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)) 

Здесь вы можете увидеть, что «Kivilcim» превращается в «к». После первого турецкого символа 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 полагать, что я отправляю строки больше, чем думает

ответ

3

Предполагаю, что вы отправляете эти запросы с PHP. Я могу сказать это, потому что ты - я.

Видимо, «сортировка utf8_turkish_ci» может декодировать gibberish utf8 коды, но не простые турецкие символы. Изменение кодировок в файлах php на header('Content-Type: text/html; charset=utf8'); позволяет решить эту проблему.

+3

wow спасибо, что он работал как магия. – interlude

+1

Вздох ... заставил меня смеяться, хотя хаха – Brendan

0

Я использовал текстовый редактор notepad ++ и имел ту же проблему. (несмотря на верхнее решение) На вкладке кодирования есть выбор как код с UTF-8, я выбрал его и сохранил файл. После того, как я отправил код на сервер, он работает :)

 Смежные вопросы

  • Нет связанных вопросов^_^