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

时间:2015-03-18 10:59:35

标签: php mysql unicode

当用户试图用德语保存他们的名字时,他们会像这样保存:

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

我在用萤火虫保存之前检查了这些值,它们正常显示。但是当他们被保存时,他们会像 我的表的结构是这个

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

5 个答案:

答案 0 :(得分:4)

mysql_set_charset('utf8');替换为mysqli_set_charset($con, 'utf8');(或$con->set_charset('utf8');)。您不能将功能相对于不同PHP扩展的数据库(mysql vs 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不会

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

答案 1 :(得分:0)

首先阅读此http://www.joelonsoftware.com/articles/Unicode.html以便明确编码。

然后按照本文http://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql

您需要确保在所有地方使用UTF-8编码。 Html页面,数据库架构,表格,列整理,Db连接等。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

两个问题......

SELECT HEX(col), col FROM ... WHERE ... - 对于“Müller”,如果正确存储为utf8,则应该4DC3BC6C6C6572。如果你没有得到,那么你有latin1或“双重编码”,修复数据会更复杂。

如果您在网页上显示此内容,则顶部附近需要一个合适的标签。