在mysql数据库中获取值时获取奇怪的字符

时间:2012-07-14 14:55:02

标签: php mysql character-encoding

每次我输入此字符’

时,我的数据库都会收到此类结果

从数据库中提取数据时我已经使用mysql_query('SET CHARACTER SET utf8');

我的HTML上已经有<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />.....这个。

这里缺少什么?非常感谢您的帮助和奖励!

谢谢!

3 个答案:

答案 0 :(得分:3)

我注意到您正在运行此查询... mysql_query('SET CHARACTER SET utf8');
尝试将其更改为此...

mysql_query("SET NAMES 'utf8'");

这应该确保连接是UTF-8。

另请尝试浏览本文中的项目列表... http://blog.loftdigital.com/blog/php-utf-8-cheatsheet
这列出了确保您在站点/应用程序中从前到后使用UTF-8所需的步骤,但总结如下:

  • 检查您是否拥有PHP的mbstring扩展名,并在脚本中设置了mb_internal_encoding('UTF-8');
  • 确保在连接到数据库mysql_query("SET NAMES 'utf8'");后运行此MySQL查询,以确保连接为UTF-8。
  • 设置输出的HTTP标头... header('Content-type: text/html; charset=UTF-8');。如果您已将mb_internal_encoding()设置为上述但对调试
  • 有用,则似乎不需要这样做
  • 确保HTML页面的输出编码已设置为<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

答案 1 :(得分:1)

尝试使用charset collate进行选择并使用utf8_bin,如下所示:

SELECT k COLLATE utf8_bin AS k1
FROM t1
ORDER BY k1;

如果它适合你,你可以使用alter table更改列的整理,这是我今天用于其中一个dbs的例子:(你也可以用phpMyAdmin轻松完成这个)

ALTER TABLE  `users` 
CHANGE  `name`  `name` VARCHAR( 255 ) 
CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

但请先备份!

答案 2 :(得分:0)

我遇到了同样的问题,并且解决了:

mysql>字符集utf8mb4

我读到某处utf8在mysql中坏了,必须改用utf8mb4。