德语字符 ü ö ä Ä Ü Ö ß 未正确保存在数据库中
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",修复数据会更复杂。
如果您要在网页上显示它,您需要在顶部附近放置一个合适的标签。
当用户尝试用德语保存他们的名字时,他们的保存方式如下:
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 aSET NAMES
(orSET CHARACTER SET
) statement.mysql_set_character_set()
works likeSET NAMES
but also affects the character set used bymysql_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",修复数据会更复杂。
如果您要在网页上显示它,您需要在顶部附近放置一个合适的标签。