使用php脚本将UMLAUT插入到mysql数据库中

时间:2010-05-20 13:24:22

标签: php utf-8 character-encoding phpmyadmin diacritics

我正在开发一个脚本,它以csv作为输入,然后读取文件并将其内容插入到mysql数据库中。因此,在将数据插入数据库时​​会出现问题。它将UMLAUT转换为随机字符。

仅供参考 - 我的数据库位于latin_german_ci中。 [我也尝试将其改为UTF8]

我可以在Web浏览器中显示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 个答案:

答案 0 :(得分:2)

相同程序......请参阅

Whether to use "SET NAMES"

Is "SET CHARACTER SET utf8" necessary?

基本上,你必须告诉MySQL它应该从客户端(你的PHP脚本)预期哪个字符集。

答案 1 :(得分:0)

为什么在拉丁语数据库中使用utf8_encode()?什么是您的网页编码(HTTP内容类型和HTML元标记)?什么是源代码的编码(您可以在编辑器中配置它)?您使用哪个程序来查看数据库以及使用哪种编码?