我正在尝试编写一个 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_encode
和 utf8_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
应用于您的连接和目标表。
关于php - 将 CSV 中的中文字符插入 MySQL 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770415/