德语字符 ü ö ä Ä Ü Ö ß 未正确保存在数据库中

German characters ü ö ä Ä Ü Ö ß not saved properly in database

当用户尝试用德语保存他们的名字时,他们的保存方式如下:

Markus Müller ( Markus Müller)
Angela Eisenbl�tter ( Angela Eisenblätter )
Doris Vötter ( Doris Vötter )

我在用 firebug 保存之前检查了这些值,它们正常显示。但是保存时它们会像上面那样显示。 我的table的结构是这样的

name    varchar(250)    utf8_unicode_ci 
email   varchar(250)    utf8_unicode_ci 
company varchar(250)    utf8_unicode_ci 
reading int(11)
rdate   timestamp

请帮帮我

更新

$con=mysqli_connect("localhost","englisch_root","b00t","englisch_efront");
mysql_set_charset('utf8', $con);

在我这样添加之后它给出了完整的错误 警告:mysql_set_charset() 期望参数 2 为资源,

首先阅读这个http://www.joelonsoftware.com/articles/Unicode.html为了编码的清晰度。

那就关注这篇文章吧http://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql

您需要确保在所有地方都使用 UTF-8 编码,包括。 Html 页面、数据库架构、table、列排序规则、数据库连接等

用户 table 列数据是 ASCII 而不是 utf8_unicode_ci。

mysql_set_charset('utf8'); 替换为 mysqli_set_charset($con, 'utf8');(或 $con->set_charset('utf8');)。您不能混合与不同 PHP 扩展名 (mysql vs mysqli) 的数据库有关的功能:它们在不同的连接上工作,因此它们相互不兼容。

备注:

  • MySQL 使用 utf8,而不是 utf-8
  • 永远不要直接执行 SET NAMES 语句,这是不安全的:

If you must change the character set of the connection, use the mysql_set_character_set() function rather than executing a SET NAMES (or SET CHARACTER SET) statement. mysql_set_character_set() works like SET NAMES but also affects the character set used by mysql_real_escape_string(), which SET NAMES does not.

(from MySQL's documentation about mysql_real_escape_string, mysql(i)_set_charset PHP 函数背后的C函数)

在查询之前使用 mysqli_query($link,"SET CHARACTER SET utf8"); 解决了我的问题。 P.s。我建议使用 mysqli_set_charset.

两个问题...

SELECT HEX(col), col FROM ... WHERE ... -- 对于 "Müller",如果正确存储为 utf8,您应该得到 4DC3BC6C6C6572。如果你不明白,那么你有 latin1 或 "double encoding",修复数据会更复杂。

如果您要在网页上显示它,您需要在顶部附近放置一个合适的标签。