循环使用CSV不会在MySQL中添加带有特殊字符的字符串

时间:2013-09-17 12:50:56

标签: php mysql csv

我有这个简单的代码来存储来自CSV文件的MySQL表中的数据:

$file = "GeoLiteCity-Location.csv";
$handle = fopen($file, "r");

//loop through the csv file and insert into database
do {
    $n++;
    if ($data[0]) {
        $city = str_replace('"', '',$data[3]);
        $region = str_replace('"', '',$data[2]);
        $latitude = $data[5];
        $longitude = $data[6];
        $country_id = $mobbuteo::$db->select('_countries', 'country_id', array('code' => str_replace('"', '',strtoupper($data[1]))));
        $latlong = $mobbuteo::$db->select('_cities', '*', array('latitude' => $latitude, 'longitude' => $longitude));

        if ($country_id[0]['country_id'] !== 0 && $country_id[0]['country_id'] !== '' && $country_id[0]['country_id'] !== NULL)
            if (count($latlong) <= 0)
                $result = $mobbuteo::$db->insert_update('insert', '_cities', array('country_id' => $country_id[0]['country_id'], 'city' => $city, 'region' => $region, 'latitude' => $latitude, 'longitude' => $longitude));

        if (!$result) {
            echo($city);
        }
    }
} while ($data = fgetcsv($handle, 1000, ",", "'"));

由于某些原因,在DB城市中,名字中​​的特殊字符会被切断。 例如:L·i ThiÍu在我的数据库表中仅变为L。我正在使用UFT8 General Ci

那有什么问题? 但最重要的是,我如何才能获得所有具有特殊字符的城市并正确修改其名称?

感谢您的任何建议

2 个答案:

答案 0 :(得分:0)

检查您的脚本是否以UTF-8运行:

header('Content-Type:text/html;charset=utf-8');

检查数据库连接是否设置为UTF-8:

->query('SET NAMES utf8');

而不是str_replace转义字符,请使用本机数据库方法(如real_escape_string mysqli)。您可能需要检查$mobbuteo::$db是否有escape或类似的方法。

答案 1 :(得分:0)

在打开与mySQL数据库的连接后尝试运行以下语句

@mysql_query('SET NAMES "utf8"', $conn);
@mysql_query("SET CHARACTER SET 'utf-8'", $conn);