设置连接字符集会产生违反直觉的结果

时间:2010-06-27 22:37:56

标签: php mysql utf-8

我几乎完成了对我的网络应用程序进行大修的任务,以便正确地“识别UTF-8”。但我发现,如果我使用utf8将连接字符集设置为mysqli_set_charset,结果是输出显示不正确(实际上看起来好像页面的字符编码被错误识别),而如果我设置连接字符集,它会正确显示。

例如,如果我设置连接,则存储在我的数据库中的一个表中的字符串 - 列的字符集为utf8 - 正确回显为Página principal字符集。如果我执行设置连接字符集,它将显示为Página principal

详细信息:我用来测试此行为的PHP脚本在<head>部分中包含以下元标记:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

我已确定主机上新连接的默认字符集为latin1。我要连接的数据库具有默认字符集utf8。以下是用于创建数据库链接的代码:

$cxn = @mysqli_connect('localhost', $db_user, $db_password, $db_database) or die('Failed to connect to the database.');
mysqli_set_charset($cxn, 'utf8');
mysqli_query($cxn, 'SET SESSION sql_mode = \'TRADITIONAL\'');

此外:如果它应该作为一些额外的取证证据,我发现如果我在Firefox中查看页面并手动将字符编码更改为ISO-8859-1,则上述字符串显示为Página principal

1 个答案:

答案 0 :(得分:1)

这可能是因为插入数据时字符编码不同,因此可能存储错误的编码(表编码设置为utf8?)。检查新插入的数据是否正常返回。 (使用utf8连接插入的Aka数据)