2012-06-26 3 views
2

제목에서 언급 한 터키 문자와 관련된 문제가 있습니다. 여기MySQL을 사용한 터키어 문자 인코딩

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 '로 켜지는지 볼 수 있습니다

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 

이것은 내가 실행 쿼리의 덤프입니다 : 내가 MySQL을 함수를 만들었습니다. 첫 번째 터키 문자 뒤에 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 in입니다. 편집 : 내 질문에 질문이 포함되어 있지 않은 것으로 나타났습니다. 그래서 여기 있습니다 : MySQL이 내가 생각하는 것보다 더 큰 문자열을 전송한다고 믿게 만들 수 있습니까?

답변

3

PHP에서 이러한 쿼리를 보내는 것으로 가정합니다. 나는 네가 나이기 때문에 그렇게 말할 수있다.

분명히 'utf8_turkish_ci'데이터 정렬은 횡설수설 utf8 코드를 디코딩 할 수 있지만 일반 터키 문자는 디코딩 할 수 없습니다. header('Content-Type: text/html; charset=utf8');으로 PHP 파일의 인코딩을 변경하면이 문제를 해결할 수 있습니다.

+3

와우 덕분에 마술처럼 작동했습니다. – interlude

+1

한숨 ... 나를 웃게했다. 하하. – Brendan

0

나는 notepad ++ 텍스트 편집기를 사용해 왔으며 같은 문제가있었습니다. (상단 솔루션에도 불구하고) 코딩 탭에는 UTF-8 코드로 선택되어 있으며, 파일을 선택하고 저장했습니다. 서버에 코드를 보내면 작동합니다.