2010-05-20 1 views
1

나는 csv를 입력으로 사용하는 스크립트를 개발 중이다. 그러면 파일을 읽고 그 내용을 mysql 데이터베이스에 삽입한다. 데이터를 데이터베이스에 삽입하는 중에 문제가 발생합니다. 그것은 UMLAUT를 임의의 문자로 변환합니다.PHP 스크립트를 사용하여 mysql 데이터베이스에 UMLAUT 삽입하기

FYI - 내 데이터베이스는 latin_german_ci에 있습니다. [나는 또한 UTF8로 변경하려고 시도했다]

웹 브라우저에 UMLAUT 문자를 표시 할 수 있지만 SQL 쿼리를 통해 데이터베이스에 삽입하려고하면 임의의 문자가 삽입됩니다.

<?php 

function uploadCsv($filename){ 

    echo "filename - ".$filename."<br/>"; 

    if(isset($filename) || $filename == ""){ // return with an error msg. 

    }else{ 
     $pos = stripos($filename, ".csv"); 
     if($pos == 0 || $pos != strlen($filename)-4){ 
      //echo "invalid format"; 
      return ; 
     } 
    } 

    set_time_limit(0); 
    $error = ""; 
    $row = 0; 
    $handle = fopen($filename, "r"); 
    //echo "<br/>".$filename."<br/>"; 
    //echo "<br/>".$handle."<br/>"; 
    if($handle == null){ 

     return "unable to process"; 
    } 

    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 

     if ($row == 0) { 
      // this is the first line of the csv file 
      // it usually contains titles of columns 
      // do nothing. 
      $num = count($data); 
      //echo "num - ".$num."<br/>"; 
      if($num != 2){ 
       // echo "returning back"; 
       return "invalid CSV format."; 
      } 
     } 
     // this handles the rest of the lines of the csv file 
     $num = count($data); 
     $id = $data[0]; 
     $inserQuery = ""; 
     $inserQuery = "INSERT INTO `table` (
          `ID` , 
          `Productname` 
          ) 
          VALUES ("; 

     for ($c=0; $c < $num; $c++) { 
      if($c==0){ 
       $inserQuery .= " '". utf8_encode($data[$c])."'" ; 
      }else{ 
       $inserQuery .= ", '". utf8_encode($data[$c]) ."'" ; 
      } 
     } 
     $inserQuery .= ");"; 
     echo $inserQuery."<br/>"; 
     mysql_query($inserQuery); 
     if(mysql_affected_rows() == -1 || mysql_affected_rows() <1){ 
      echo "error<br/>"; 
     }else{ 
      echo "row inserted - ".$row." with ID = ".$id." <br/>"; 
     } 
     $row++; 
    } 
    fclose($handle); 
    return "1"; 
} 
?> 

도와주세요

....

감사

답변

2

같은 절차 ...

Whether to use "SET NAMES"

Is "SET CHARACTER SET utf8" necessary?

참조하십시오

본질적으로 중요한 점은 클라이언트 (PHP 스크립트)가 기대하는 문자 집합을 MySQL에 알려줘야한다는 것입니다.

+1

그리고 CSV 파일의 인코딩과 사용자의 로케일 설정도 확인해야합니다. fgetcsv에 대한 PHP 설명서는 다음과 같이 설명합니다. * 참고 : 로케일 설정은이 기능에 의해 고려됩니다. LANG이 예인 경우 en_US.UTF-8,이 함수는 1 바이트 인코딩의 파일을 잘못 읽습니다. * – wimvds

+0

Windows에서 CSV 파일의 로케일 설정을 변경하려면 어떻게해야합니까 ?? – mudit

+0

CSV를 만든 프로그램에 따라 다릅니다 (예 : Excel에서는 기본 문자 세트 (적어도 내가 아는 한)가 붙어 있습니다. –

0

왜 라틴어 데이터베이스에 utf8_encode()를 사용합니까? 웹 페이지의 인코딩 (HTTP Content-Type 및 HTML 메타 태그)은 어떻게됩니까? 소스 코드의 인코딩은 무엇입니까 (편집기에서 구성 할 수 있습니까?). 데이터베이스를보기 위해 어떤 프로그램을 사용하고 어떤 인코딩이 이것을 사용합니까?