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


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保存之前,我检查了这些值,它们显示正常。但当保存时,它们显示为如上所示。我桌子的结构是这个

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为资源,

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

注:

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

如果必须更改连接的字符集,请使用mysql_set_character_set()函数,而不是执行SET NAMES(或SET CHARACTER SET)语句。mysql_set_character_set()的工作原理类似于SET NAMES,但也会影响mysql_real_escape_string()使用的字符集,而set NAMES不会

(来自MySQL关于mysql_real_escape_string的文档,MySQL(i)_set_charset PHP函数背后的C函数)

使用mysqli_query($link,"SET CHARACTER SET utf8"); BEFORE查询解决了我的问题。附言:我建议使用mysqli_set_charset

用户表列数据采用ASCII格式,而不是utf8_unicode_ci格式。

两个问题。。。

SELECT HEX(col), col FROM ... WHERE ...——对于"Müller",如果它正确地存储为utf8,则应该得到4DC3BC6C6C6572。如果你不明白,那么你要么有latin1,要么有"双重编码",修复数据将更加复杂。

如果你在网页上显示这个,你需要在顶部附近有一个合适的标签。

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

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

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