2011-11-09 3 views
2

mySQL 테이블의 데이터 유형이 TEXT이고 collation이 utf8_unicode_ci로 설정된 테이블 정렬 (알 수없는 이유로)이있는 필드가있는 프로젝트에서 작업하고 있습니다.mySQL TEXT 데이터 유형이 이상하게 표시되는 문제

-V MySQL의 출력은 "MySQL을 사용하여 5.2의 readline 데비안 리눅스 GNU (x86_64의) 미국 14.12 DISTRIB의 5.0.51a, VER"

PHP 버전 5.2이다.

이 필드의 일부 행에있는 데이터는 "[Dan S. Leyrer?]"입니다. 명령 줄에서 레코드를 쿼리하면 정상적으로 보입니다. phpMyAdmin에서 레코드를 보거나 편집하면 Chrome 및 IE9에서 정상적으로 보입니다. 그러나 필드가 IE9, Chrome, FF 등 PHP 스크립트 출력의 일부로 표시되면 물음표는 아포스트로피 "[Dan S. Leyrer ']"로 표시됩니다. IE9 및 Chrome의 phpMyAdmin 및 명령 줄을 통한 mySQL 모니터의 편집을 시도했으며 디스플레이 변경이 없었습니다.

틀림없이, 나는 utf8_encode(), utf8_decode(), htmlentities()에 대한 호출을 추가하려고 시도했다. 효과가 없습니다.

다른 필드를 편집 해 보았는데 결국 "?" TEXT 데이터 유형이있는 모든 필드에이 문제가 PHP 출력에 표시되었지만 동일한 utf8_general_ci 데이터 정렬을 사용하는 VARCHAR 필드에는 문제가 없었습니다.

어떻게 될까요?


나는 이것을 열심히 도와 준 모든 사람에게 많은 사과를합니다.

내 전임자가 스파게티 코드에서이 문자열에 일부 처리를 적용했습니다. 나는 그것을 알지 못했다. 나는 UTF8 문제를 처리하기위한 노력의 일환이었다 가정

function scrub_string($input_string) { 
    $replace_array = array("?","\x92","?","\x91"); 
    $input_string = str_replace($replace_array,"'",$input_string); 
    $output_string = utf8_encode($input_string); 
    return $output_string; 
} 

나는 뉴 올리언스에 와서 ... 낭비되는 시간이 매우 매우 유감스럽게 생각 나는 맥주를 구입하고있다.

+0

http://akrabat.com/php/utf8-php-and-mysql/는 몇 가지 포인터를 제공해야합니다. –

+0

알아두기, 테이블 데이터 정렬은 새 열에 대한 기본값입니다. 변환 및 저장의 경우 연결 문자 세트 및 열 데이터 정렬 만 중요합니다. – AndreKR

답변

2

분명히 DB 연결 문자 집합 (SET NAMES을 사용하여 설정)은 브라우저가 기대하는 문자셋 (Firefox 페이지 정보 -> 인코딩)과 다릅니다.

UTF-8로 모두 설정보십시오

mysql_set_charset('utf8'); // SET NAMES utf8 
header('Content-Type: text/html; charset=utf-8'); 
+0

호출하는 파일의 내용이 이면 충분하지 않습니까? – jerrygarciuh

+0

충분하면 * Page Info * 대화 상자에서 확실히 알려줍니다. SET NAMES를 잊지 마라. – AndreKR

+0

쿼리와 헤더를 추가했습니다. 그 (것)들에있는 é를 가진 2 개의 분야는 현명한 영향을 받았다. 그러나이 문제는 계속된다. – jerrygarciuh

1

사용 된 정렬은 단지 그것으로 데이터를 전송하는 데 사용되는 캐릭터에 영향을주지 않고 데이터 저장 및 데이터베이스 내부에서 처리되는 방식을 결정 클라이언트. 후자는 mysql_set_charset으로 설정할 수 있습니다. 생성 된 출력 문서에 사용 된 것과 동일한 charset으로 연결을 설정하십시오. 아마도 도움이 될 것입니다.

+0

$ lnk = mysql_connect ($ server, $ username, $ password); mysql_set_charset ('utf8', $ lnk); – jerrygarciuh

+0

동일한 문서 페이지에서 mysql_query ("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $ lnk)를 추가했으나 여전히 변경이 없음 – jerrygarciuh

+0

이것은 정말로 이상한 문제 인 것 같습니다. 브라우저로 보내기 전에 PHP 측에서 문자열을 처리합니까? 아마도 PHP 스크립트 전체를 데이터 읽기 및 인쇄 관련 부분으로 스트립 할 수 있습니다. 이 문제가 지속되는지 확인하고 질문에 코드를 추가하십시오. – Simon

관련 문제