Вставка UMLAUT в базу данных mysql с использованием php-скрипта - PullRequest
1 голос
/ 20 мая 2010

Я разрабатываю сценарий, который принимает CSV в качестве входных данных, затем читает файл и вставляет его содержимое в базу данных MySQL. Таким образом, проблема возникает при вставке данных в базу данных. Он преобразует UMLAUT в случайные символы.

К вашему сведению - моя база данных находится в 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 ]

2 голосов
/ 20 мая 2010

Та же процедура ... Пожалуйста, смотрите

Использовать ли "SET NAMES"

и

Требуется ли «SET CHARACTER SET utf8»?

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

0 голосов
/ 20 мая 2010

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

...