2010-05-20 4 views
1

Я разрабатываю скрипт, который принимает csv как вход, затем считывает файл и вставляет его содержимое в базу данных mysql. Поэтому проблема возникает при вставке данных в базу данных. Он преобразует UMLAUT в случайные символы.Вставка UMLAUT в базу данных mysql с использованием php-скрипта

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?

По сути, вы должны сказать MySQL, какой набор символов он должен ожидать от клиента (ваш PHP-скрипт).

+1

И вы должны также проверить кодировку CSV-файла и ваших настроек локали ... Поскольку в руководстве по PHP для fgetcsv указано: * Примечание: эта функция учитывается в настройках локали. Если LANG является, например, en_US.UTF-8, файлы в однобайтовой кодировке читаются неправильно этой функцией. * – wimvds

+0

Как изменить настройки языкового стандарта CSV-файла на окнах? – mudit

+0

Зависит от программы, которую вы создали CSV, например, с Excel вы застряли в кодировке по умолчанию (по крайней мере, насколько я знаю). –

0

Почему вы используете utf8_encode() для латинской базы данных? Какова кодировка вашей веб-страницы (HTTP-тип контента и HTML-метатеги)? Что кодирует исходный код (вы можете настроить его в своем редакторе)? Какую программу вы используете для просмотра базы данных и какую кодировку это использует?

Смежные вопросы