2012-04-24 2 views
2

하나의 테이블 이름에 PHP/MySQL-application을 저장했습니다. 이 이름에는 특수 문자 (예 : é, à, ë, ...)가 포함될 수 있습니다.다시 한번 ... php-mysql export UTF-8-issues

테이블을 만들 때 colocation-item을 UTF-8로 설정하는 것을 잊었으며 이제는 LATIN1_SWEDISH_CI로 설정됩니다. phpMyAdmin에서 일부 데이터가 올바르게 표시되지 않습니다. 그러나 PHP 페이지에 이름을 표시하면 해당 특수 문자가 올바르게 표시됩니다. 내가 사용하는 경우 여기에 PHP 파일에서 추출물의 UTF-8

<?php ... ?> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content-"text/html; charset="UTF-8"> 
.... 

나는 특수 문자가 예상대로 표시됩니다 말했듯이. 지금까지 ... 문제 없습니다.

하지만 이제 해당 데이터를 CSV 파일로 내보내고 추측하고 싶습니다. 특수 문자는 CSV 파일에 포함되어 있지 않습니다.

<?php 
mysql_query("SET NAMES utf8"); 
header('Content-Type: text/html; charset=UTF-8'); 
... 

그러나 특수 문자가 표시되지 않습니다 : 내 PHP-수출 파일은 코드의 다음 줄을 포함?

누구에게이 문제의 해결책이 있습니까? Excel에서 CSV를 열고 'Find & 바꾸기'를 사용하는 것이 다소 우스운 일이기 때문입니다. HTML 이스케이프 코드를 사용하는 것은 문제가되지 않습니다. 그것이 UTF-8이 아닌 이유입니다.

+0

메모장에 CSV 파일이 없거나 Excel에 표시하는 데 문제가 있습니까? Excel은 종종 CSV 파일의 인코딩을 인식하는 데 어려움이 있으므로 Excel이 올바르게 구성되었는지 여부를 조사해야 할 수도 있습니다. – Daan

답변

1

MySQL이 Latin-1 데이터로 간주하는 UTF-8 인코딩 된 데이터를 저장했습니다. 임의의 바이트 순서가 유효한 Latin-1이기 때문에 MySQL은이 문제에 대해 불평하지 않습니다. 데이터를 검색하는 데 사용 된 연결의 연결 문자 집합이이를 삽입하는 데 사용 된 것과 동일하기 때문에 올바른 데이터가 웹 페이지에 표시됩니다. 그러나 실제 저장 한 문자를 표시하는 데 힘이 들지 않는 유틸리티에서 데이터를 보면 인코딩 된 텍스트가 실제로 저장되어 있기 때문에 잘못 인코딩 된 텍스트가 표시됩니다.

다음과 같은 두 가지 작업을 수행해야합니다. 먼저 데이터베이스 연결 코드를 변경하여 데이터베이스에 대한 모든 연결에서 UTF-8 문자 집합을 사용하는지 확인해야합니다. 이것은 설정 파일을 사용하거나 연결할 때마다 SET NAMES 문을 발행하여 수행 할 수 있습니다.

둘째, 이미 데이터베이스에 저장된 잘못 인코딩 된 데이터를 수정해야합니다. 테이블을 변경하여 문자 세트를 UTF-8로 직접 변경하지 마십시오. 그렇게하면 UTF-8로 인코딩 된 이중 데이터로 끝납니다. 대신 alter table 쿼리를 사용하여 열을 이진 문자 세트로 변경 한 다음 테이블을 UTF-8로 다시 변경하십시오.