2011-09-10 3 views
7

웹 사이트가 영어 (예 : 일본어)가 아닐 수도있는 사용자 제출 콘텐츠를 받아서 데이터베이스에 저장하려면 utf8_encode에 최대한 관심을 기울여야합니다. 모든 새로운 컨텐츠 및 사용자 utf8_decode를 나중에 검색 할 때?utf8_encode() (PHP 함수) 사용을위한 콘텐츠 모범 사례 국제화

추가 정보 : 나는 교리를 이용하고 있고 MySQL 데이터베이스에 유니 코드 문자를 저장하거나 선택하려고 할 때이 오류가 점점 오전 :

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

+0

여기에 테이블 스키마를 포함하십시오. 그리고 가능한 전체 SQL을 제공 할 수 있습니까? <- 힌트 (비교 문제) – ajreal

+0

추가 정보 필요 : 테이블에서 사용하는 데이터 정렬은 무엇입니까? –

+0

가능한 [UTF-8까지 완료] (http://stackoverflow.com/questions/279170/utf-8-all-the-way-through) – mercator

답변

8

당신은 인코딩 기능을 사용할 필요가 없습니다. 당신이해야 할 일은 UTF8 끝에서 끝까지 끝내는 것입니다. 데이터베이스가 latin1 인코딩 및 데이터 정렬을 사용하고있는 것 같습니다. 데이터베이스에 대한 연결도 UTF8이어야합니다. 때로는 연결을 설정 한 직후 SET NAMES UTF8 쿼리를 실행하기 만하면됩니다.

mysql에서이 명령을 실행하면 위 오류를 해결할 수 있지만 여전히 종단 간 UTF8이어야합니다. 그런 다음 데이터에 특별한 조치를 취할 필요가 없습니다.

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 
5

브렌트가 옳다. 그것은 종단 간 (end-to-end)이어야합니다. 내 목록은 다음과 같습니다.

Apache config: 
    AddDefaultCharset UTF-8 
    AddCharset UTF-8 .utf8 

php.ini: 
    default_charset = "utf-8" 

MySQL: 
    ALTER DATABASE DEFAULT CHARACTER SET utf8; 
    ALTER TABLE SomeTableName DEFAULT CHARACTER SET utf8; 

PHP/HTML: 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    … 
    <form … <input type="text" name="some_field" value="<?php echo htmlspecialchars($row['some_field'], ENT_COMPAT, 'UTF-8'); ?>"… 

This last one seems the most important. Call this function immediately after the mysql_connect() call: 
    mysql_query("SET NAMES 'utf8'");