当用户试图用德语保存他们的名字时,他们的保存方式如下:
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连接等。