只有从PHP插入时才能正确显示特殊字符

时间:2013-08-10 22:06:25

标签: php mysql utf-8 character-encoding navicat

我有表Users(带有UTF8字符集和 utf8_general_ci 排序规则),其中包含lastName列(与表格相同的字符集和排序规则)。当我直接从 Navicat for MySQL 将我的名字(Štěrba)插入到这个表和列中时,它在Navicat中正确显示,但在浏览器中显示得很糟糕(输出文档是UTF8,在mysql_connect()之后我也是使用SET CHARACTER SET utf8):

Correctly in Navicat, wrongly in browser

但是当我这样做时,使用此查询从PHP插入:

INSERT INTO users (firstName, lastName) values ('Pavel', 'Štěrba');

它在浏览器中正确显示,但在Navicat中它保存如下:

Wrongly in Navicat, correctly in browser

显然,我不能直接从navicat编辑它,因为我会打破它...你有任何想法,为什么会这样?我错过了编码吗?或者是Navicat的问题?感谢您的提示!

2 个答案:

答案 0 :(得分:1)

机会很高你做错了,而不是每个人都使用的工具。

不要通过查询摆弄编码设置!使用mysql_set_charset()

您必须通过PHP修复数据库中的所有条目。

请注意" SET CHARACTER SET"是错的,虽然这听起来是正确的。如果你不能使用上面的PHP函数,你应该做的就是使用" SET NAMES utf8"只有!

答案 1 :(得分:0)

SET NAMES utf8

之后也使用SET CHARACTER SET utf8

我希望这个帮助