php - 将 CSV 中的中文字符插入 MySQL 时遇到问题

标签 php mysql pdo utf-8

我正在尝试编写一个 PHP 脚本,该脚本循环遍历 CSV 并将 CSV 中的值插入到 MySQL 表中。这些字符在 CSV 中看起来很好,但是当我将它们插入数据库时​​,它们显示为紂夲 和变体。

我将 PDO 连接设置为 UTF-8 字符集,表本身设置为 UTF-8,当我转储字符时,它们显示为正确的汉字,只要我设置 UTF-8 header 。然而,它们在插入时会变得不稳定,并且在选择它们退出时仍然如此。如果我使用 GUI (Navicat) 插入特定短语,它会正确选择。

$mysql = new PDO('mysql:host=1.2.3.4;dbname=db;charset=UTF-8', 'username', 'password');

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

$handle = fopen('bannedWords.csv', 'r');
$count = 0;
$word = '';
$insert = $mysql->prepare("INSERT INTO sensitivePhrases SET phrase = :word");
$insert->bindParam(':word', $word);
while (($data = fgetcsv($handle)) !== false) {
    $word = $data[1];
    var_dump($word);
    $insert->execute();
}

我尝试过使用 uft8_encodeutf8_decode 以及 mb_convert_encoding,但都没有帮助。我希望得到一些关于我哪里出错的建议。

最佳答案

在 MySQL 中,您需要指定 utf8mb4 因为 UTF-8 在宇宙的其余部分是 4 字节索引,而在 MySQL 中它只是 3 字节索引,因此仅显示所有 UTF-8 字符的小子集。

$mysql = new PDO('mysql:host=1.2.3.4;dbname=db;charset=utf8mb4', 'username', 'password');

您需要将 utf8mb4 应用于您的连接和目标表。

阅读优秀文章StackOveflow post about UTF-8 here

关于php - 将 CSV 中的中文字符插入 MySQL 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770415/

相关文章:

php - session_start() 函数如何工作?

php - 如何在 phpmyadmin 中用另一个字母替换一个字母?

php - 如何在 laravel 5.4 中获取最后插入的 id

php - 向所有 json_encode() 数据添加一个通用词

php - SQLSTATE [28000] [1045]:服务器提供程序崩溃后出现奇怪的PDO错误

php - PHP 中类抽象和对象接口(interface)的区别?

php - 文本文件中的递增数字

php - 如何让 ZipArchive 不覆盖某些文件和文件夹

mysql - 如何使用 spring-data-jpa 对具有持久关系的实体执行 native 查询

pdo - 带有特殊字符的 PHP PDO