2015-10-12 102 views
2

我一直有问题,用PHP脚本将一些数据插入到InnoDB MySQL表的varchar字段中。最初我以为这个问题是由于使用utf8字符编码造成的,因为我对我收到的错误“不正确的字符串值”进行了一些研究,并在这里找到了一些关于将我的表切换到utf8mb4的有用帖子。使用utf8mb4编码的MySQL“错误的字符串值”错误

所以我把它切换到'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

什么是您的PHP文件的字符编码?它取决于你的编辑器,但通常(a)在某处的文件菜单下,或者当你保存一个文件时,你将能够指定编码,并且(b)你想要使用UTF-8,除非有很好的理由不这样做。 (你的问题几乎可以肯定的是,你实际上没有发送UTF-8数据到服务器,因为你的查询没有保存在PHP文件本身的UTF-8中,MySQL Workbench将使用UTF-8。) –

+0

谢谢马特!对不起,我花了这么长时间才回复。我在我使用的编辑器(PHP Storm)的File菜单下找到了File Encoding设置,它允许我将它转换为UTF-8。我也能够在我试图处理的数据文件上执行此操作,并修复了所有错误消息。好极了!我非常感谢你的帮助。 –

+0

没问题。我已经添加了一个真实的答案,现在我们已经确认这是问题所在。 –

回答

0

当您将PHP中的文本嵌入到PHP文件中时,PHP文件本身的编码将发挥作用。你需要确保你的PHP文件本身保存在UTF-8中。你怎么做取决于你的编辑器。对于PHP,保存unicode文件时选择“无BOM”(字节顺序标记)选项也很重要。