2012-02-21 5 views
1

여기에 이상한 문제가있다 :MySQL의 PHP는 UTF-8

내가 MySQL의 DB (디폴트의 캐릭터 세트 UTF-8)로 CSV 파일에서 데이터를 쓸 필요가 내가 CSV를 읽고 인쇄

insert into orari (pv_id, day) values(5492, 'giovedì pomeriggio') 

하지만 난 MySQL의 클라이언트와 선택 쿼리를 실행하면 결과는 이상한 : (디버깅 목적) 단자에 쿼리 문자열 출력은 정확

*************************** 273. row *************************** 
      id: 28856 
      day: giovedì pomeriggio 
      pv_id: 5760 

phpmyadmin에서 쿼리를 실행하면 똑같습니다.

HTML 출력이 정확합니다. charset이 UTF-8로 설정되고 àòù와 같은 문자가 올바르게 시각화됩니다.

* 편집 * 이 내 MySQL의 문자 집합 및 데이터 정렬 설정 : 그들은 서버와 악수 할 때

SHOW VARIABLES LIKE 'c%'; 

| character_set_client  | utf8             | 
| character_set_connection | utf8             | 
| character_set_database | utf8             | 
| character_set_filesystem | binary            | 
| character_set_results | utf8             | 
| character_set_server  | utf8             | 
| character_set_system  | utf8             | 
| collation_connection  | utf8_general_ci          | 
| collation_database  | utf8_general_ci          | 
| collation_server   | utf8_general_ci          | 
+0

CSV가 UTF-8입니까? –

+0

예, CSV에서 읽은 후 mb_detect_encoding ($ string)을 인쇄하면 결과가 UTF-8이고 터미널에 echo $ string 출력이 정확합니다 (터미널은 밝은 속도 응답의 경우 utf8 : – bicccio

답변

3

각 MySQL 클라이언트가 원하는 문자 집합을 지정해야합니다. 무시 된 경우가 아니면 기본값은 latin1입니다.

SET NAMES 'utf8'; 

을 또는 MySQL의 설명서에 설명 된대로이 MySQL charset configuration에 설정할 수 있습니다 :

당신은이 문제를 해결하기 위해 모든 연결에 다음 쿼리를 실행할 수 있습니다.

+1

xx 임). 그냥 SET NAMES 'utf8'을 실행하려고 시도했지만 클라이언트 연결 후 첫 번째 쿼리는 출력이 동일합니다 ... – bicccio

+0

CSV가 실제로 UTF-8입니까? ['mb_detect_encoding'] (http : //php.net/manual/en/function.mb-detect-encoding.php)을 찾으십시오. – Treffynnon

+0

mb_detect_encoding의 결과는 UTF-8 ... 어떤 식 으로든 변경되는 삽입 쿼리입니다. charset, beacuse 이 작업이 끝난 직후에 쿼리 문자열 삽입은 UTF-8입니다. – bicccio

0

HTML과 입력이 맞지만, mysqlphpmyadmin 만 정확하다고 말합니다. "8 비트 클린, 1 바이트 당 1 바이트"를 의미하는 latin1이 기본값이므로 올바른 연결 문자셋을 설정해야합니다.

(이 문제에 영향을 미치지 않습니다,하지만 당신은 테이블 또는 열이 UTF-8 저장을 지정할 수 있는지 확인해야합니다.)

당신은 쓰레기 출력을 알 수 있습니다

무슨 일이 저장되어 있음을 의미하는 2 바이트이다 DB에서 확실히 UTF8입니다. 출력시 데이터가 잘못 해석되고 있습니다.

mysql 터미널 프로그램의 경우 --default-character-set 매개 변수로 시작하십시오. 터미널의 문자 세트와 일치하는지 확인하십시오.

어떻게 phpMyAdmin으로 설정했는지 모르지만 연결 문자 세트에 대한 설정도 있어야합니다.