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

Can't import special characters from CSV file

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

$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

上面的table我只有一栏位置,csv文件的内容是:"ä";

我也尝试在 table 中将 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 ();
}

提前致谢

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

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

原则:

  • 客户端 (PHP) 正在获取数据的 latin1 编码。
  • 客户端必须通知 MySQL 服务器数据的编码方式。(dsn)
  • 如果 需要,客户端和服务器之间的对话将翻译字节 。如果您的专栏使用 utf8 而客户端是 latin1,则可能会发生这种情况。这种不一致是可以的。

More discussion