我试图通过PHP将一些数据插入到表中,但像Æ和Ð这样的冰岛字符似乎并未正确传输到MySQL。我有一个使用mysqli传输数据到MySQL的PHP脚本,我在文件(mysqli-> query(“SET NAMES'utf-8')中有set_charset('utf-8'))也不工作)MySQL,PHP和utf8
数据库,表格及行都有整理UTF8,Unicode的CI
如果我更新的phpmyadmin内的数据,然后自动曝光和d出来正确但如果它使用我的脚本是。:
$stmt = $conn->prepare("UPDATE filters SET filter_nr = ?, filter_maker = ?, color = ?, bold = ? WHERE id = ?");
if (false === $stmt)
error_log("connection failed: ". $conn->error);
else
{
if ($newline["filter_nr"] === "MP")
error_log(mb_detect_encoding($newline["filter_maker"]));
$bold = (int) $newline["bold"];
$id = (int) $newline["id"];
$fnr = $newline["filter_nr"];
$fmaker = Encoding::fixUTF8($newline["filter_maker"]);
$color = $newline["color"];
header('Content-Type: text/html; charset=utf-8');
$stmt->bind_param("sssii", $fnr, $fmaker, $color, $bold, $id);
$stmt->execute();enter code here
该数据似乎包含Æ和Ð罚款到这里(至少他们表明你p在XMLHttpRequest日志中的chromes devtools中很好)但是一旦它们进入数据库,Æ和Ð就会被加扰。
我测试了数据库中的十六进制值,它们是不同的。来自我的PHP脚本的数据编码为C383E280A0(在浏览器中显示为×),但来自phpmyadmin的数据编码为C386,在浏览器中显示为Æ。
感谢Dagon,使用utf8mb4做到了。 – ojs 2015-02-09 01:35:29
MySQL charset被称为“utf8”,而不是“utf-8”(不包括引号和短划线)。 – deceze 2015-02-09 01:41:48