2013-04-22 9 views
3

나는이 간단한 PHP 스크립트를 가지고 있는데,이 스크립트는 mySQL 데이터베이스를 검색하여 그 결과를 사용자에게 출력한다. 내 문자셋으로 ISO-8859-1을 사용했지만 UTF-8을 사용하는 것이 좋습니다. 하지만 이전의 캐릭터 세트에서 새로운 캐릭터 세트로 옮기는 데 어려움이 있습니다. UTF-8이 나에게 물음표를 준다.

는 몇 가지를 명확히하기 위해, 내가 가진 :

  • 가 정렬 utf8_unicode_ciUTF-8 인코딩 된 데이터베이스와 테이블을 만들었습니다.
  • 내 PHP 파일을 UTF-8에 인코딩했습니다.
  • 메타 문자 집합을 UTF-8으로 설정하십시오.
  • 모든 텍스트를 Lighty (Lighttpd)에서 mime-types에서 UTF-8에서 create-mime.assign.pl으로 설정하십시오. 난 그냥 데이터베이스를 검색하지 않고 echo "ö";을 할 경우 내가 ö 같은 문자 데이터베이스, ü 등의 데이터를 검색 할 때

이제, 문제가 발생, 그것을 잘 작동합니다. 데이터베이스에 문제가있을 것 같습니까?

나는 다음을 시도했습니다, 그들은 내 문제를 해결했습니다

  • 설정 메타 캐릭터 세트 (어떤 이상한 이유는 작동하지만 echo'd "오"를 나누기 위해,) ISO-8859-1에.
  • 출력 주위에 utf8_decode() 함수를 설정하십시오.
  • mysql_select_db() 다음에 mysql_set_charset('utf8');을 선언 한 후.

여러 가지 해결책을 찾았지만 그 이유는 모르겠지만 그 이유는 모르겠습니다. 출력에 utf8_decode()을 사용하거나 mysql_set_charset() 기능을 사용하는 것은 나쁜 습관입니까?

+0

데이터베이스 커넥터를 통과 할 것으로 예상 보장하기 위해 데이터를 검색/전송하기 전에

query("SET NAMES utf8"); 

를 사용할 수 있을까? .. 아, 아니 ... 네, 당신은 커넥터 (mysql_set_charset)에 charset을 설정해야합니다 - 이것은 더 이상 사용되지 않습니다. 적어도 MySQLi를 사용해야합니다.) 그렇지 않으면 utf-8 PHP에서 궁극적으로 화면에 전달하기 전에 데이터베이스에서 iso 8859-1 (MySQL 커넥터의 기본값)을 사용하면 '?' – CD001

+0

@ CD001 왜 MySQL 커넥터의 기본값은 ISO-8859-1입니까? 오, 그럼 그게 문제 야. 아래에서 fullybaked의 답변을 사용하려고합니다. – AnonymousJ

+0

Heheh - 예, 알고 있습니다 ... http://php.net/manual/en/mysqli.set-charset.php 또는 http://uk3.php.net/manual/en/function.mysql-set을 시도하십시오. -charset.php, mysql_ * 함수 전체는 이제 더 이상 사용되지 않습니다. – CD001

답변

1

MySQL은 UTF8로 재미 있습니다. 당신은 서버가 UTF에서 실행 확인해야하고 당신이 [mysqld를] 섹션에 추가 할 수있는 서버의 my.cnf 파일을 수정하고 그것을

character-set-server = utf8 
skip-character-set-client-handshake 
를 다시 시작할 수있는 경우 연결이뿐만 아니라

입니다

당신은 양자 택일 (또는뿐만 아니라) 데이터베이스가 UTF8 데이터뿐만 아니라

+0

my.cnf 파일을 편집하면 작동하는지 확인합니다. 그건 그렇고, SET 이름 솔루션은 권장되지 않습니다 (또는 내가 여러 stackoverflow 게시물에서 읽은거야)] (http://stackoverflow.com/questions/5288953/is-mysql-real-escape-string-broken)/5289141 # 5289141). – AnonymousJ

+0

이름을 설정하는 인코딩을 구현하는 더 좋은 방법이 있지만 모든 것이 실패하거나 호스팅 제공 업체가 제한하는 경우 가능한 해결책입니다. 그게 내가 왜 그것을 포함했는지. my.cnf 파일을 수정하여 연결을 올바르게 설정하는 것이 좋습니다. – fullybaked

+0

하지만'character-set-server = utf8'와'skip-character-set-client-handshake'로 충분할까요? [mysqld]와 [client]에서'default-character-set = utf8'을하고, [mysqld]에서'character-set-client = utf8'을하지 않아야합니까? – AnonymousJ