无法从CSV文件导入特殊字符

时间:2015-03-11 21:18:11

标签: php mysql unicode encoding utf-8

我正在尝试将CS​​V文件导入mysql表。整个数据库都有一个utf8_unicode_ci编码。 CSV文件也具有UTF8编码。但是当我尝试运行以下内容时,它只是在表格中显示空白字符而不是特殊字符:

$query = "LOAD DATA LOCAL INFILE 'mycsvfile.csv' INTO TABLE location_temp 
          CHARACTER SET UTF8
          FIELDS TERMINATED BY ';'
          ENCLOSED BY '\"'
          LINES TERMINATED BY '\r\n'";
$parameters = array ();
$connection->QueryExec ( $query, $parameters ); //Connection class

在上表中,我只有一个列位置,csv文件的内容为:"ä";

我还尝试将csv的值更改为表中的"testthät";然后来:testth它只是在特殊字符后跳过。

编辑: 这就是我创建数据库连接的方式:

try {
    $this->conn = new PDO ( "mysql:host=" . $host . ";charset=utf8;dbname=" . $database, $user, $pass );
    $this->conn->exec ( "set names utf8" );
} catch ( PDOException $e ) {
    echo "Something went wrong while connecting to the database: " . $e->getMessage ();
}

提前致谢

1 个答案:

答案 0 :(得分:1)

截断表明它不是utf8。你说是cp1252?检查SHOW COLLATION LIKE 'CP125%';如果您没有看到cp1252,那么latin1可能就是您所需要的。

更改LOAD ...以在dsn中指定cp1252(或latin1)以通过PDO进行连接。 (这比使用SET NAMES要好。)

原则:

  • 客户端(PHP)正在为数据获取latin1编码。
  • 客户端必须通知MySQL服务器数据的编码方式。(dsn)
  • 如果需要,客户​​端和服务器之间的聊天将转换字节。如果您的列在客户端为latin1时说utf8,则可能会发生这种情况。这种不一致是可以的。

More discussion