我在使用PHP脚本将一些数据插入InnoDB MySQL表的varchar字段时遇到了问题。最初我认为问题是由使用utf8字符编码引起的,因为我对我得到的错误进行了一些研究,"错误的字符串值"并在这里发现了一些关于将我的表格切换到utf8mb4的有用帖子。
所以我把它换成了'utf8mb4'。我在几个不同的地方,服务器设置,表设置,数据库设置,以及通过mysqli_set_charset的php中完成了这个。我也试过改变MySQL设置' character-set-client-handshake'看看是否会产生影响,但即使在重新启动MySQL服务器后仍然出现错误。
我决定看看我的PHP脚本是否存在问题所以我打开了MySQL Workbench并在那里输入了相同的查询。成功了!
所以,现在我真的很困惑。为什么我可以在MySQL工作台中运行查询,但不能通过PHP运行?这是我的代码。
在MySQL Workbench中,此查询有效:
UPDATE books SET notes = 'Renâe Boivin, jeweller by Cailles, Franðcoise'
WHERE asin LIKE '0704370905'
这是我运行相同查询的PHP代码:
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_set_charset($dbc, 'utf8mb4');
$sql = "UPDATE books SET notes = 'Renâe Boivin, jeweller by Cailles,
Franðcoise' WHERE asin
LIKE '0704370905'";
该代码会生成此错误:
"Error: Incorrect string value: '\xE2e Boi...' for column 'notes' at row 2"
有什么想法吗?也许我只是忽略了一些非常简单的事情。我很感激任何建议。谢谢!
答案 0 :(得分:0)
当您在PHP文件中嵌入SQL文本时,PHP文件本身的编码就会发挥作用。您需要确保您的PHP文件本身以UTF-8保存。你如何做到这一点取决于你的编辑。对于PHP,在保存unicode文件时选择“无BOM”(字节顺序标记)选项也很重要。
答案 1 :(得分:-2)
尝试强制MySQL仅使用
接受utf8 mysqli_set_charset('utf8');
然后你可以尝试强制PHP进入utf-8
header('Content-Type: text/html; charset=utf-8');
除了确保您发送的字符串是utf-8编码。有许多以前的StackOverflow问题要做到这一点: PHP: Convert any string to UTF-8 without knowing the original character set, or at least try