无法在MySQL中获得正确的编码

时间:2012-06-28 22:46:59

标签: php mysql character-encoding

我一直在努力解决MySQL中的编码问题。我正在构建一个不仅包含拉丁文,还包含西里尔文和阿拉伯文的数据库。以下是我如何创建数据库的示例:

CREATE DATABASE db1
DEFAULT CHARACTER SET utf8   
COLLATE utf8_unicode_ci;

然后是一张桌子:

CREATE TABLE TempTb1
(
ID INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
arabic VARCHAR(100) NOT NULL
)
DEFAULT CHARACTER SET utf8   
COLLATE utf8_unicode_ci;

当我输入一些数据并选择它时,我只得到一些奇怪的字符。所以我写了一个小的PHP脚本来测试它,但它也不起作用:

<?php
header('Content-type: text/plain; charset=utf-8');

$a = mysql_connect('localhost','root','') or die('Problem connecting to database!');
$b = mysql_select_db('db1') or die('Problem selecting database');
mysql_set_charset('utf8');
mysql_query("set names 'utf8'");
mysql_query('set character set utf8');

$query = mysql_query("SELECT * FROM Tb1;");

while($row = mysql_fetch_assoc($query))
    {   
        $id = $row['ID'];
        $name = $row['name'];
        $arabic = $row['arabic'];

        echo $id.' '.$name.' '.$arabic.PHP_EOL;
    }
?>

我已使用utf8_unicode_ciutf8_general_ci进行了测试。可能有什么不对?顺便说一下,我有EasyPHP 5.2.10。

2 个答案:

答案 0 :(得分:1)

无论你的角色发生什么事,都会在他们到达MySQL之前发生,我猜。输入字符时,计算机将字符转换为数字。然后这些数字从这里到那里,在Web表单和服务器,Web服务器和脚本解释器之间,然后是数据库服务器,并以相同的方式返回到Web页面。

您输入数据的位置和方式?数据应该以它输入的方式退出。如果您的数据是通过网络表单提供的,请检查您的网页编码以及提交表单的方式。如何在PHP脚本中获取它们以及如何将它们发送到数据库服务器。这里有罪的部分可能不是MySQL,而是另一个地方。它也可以是MySQL;但它不是唯一可能存在不良行为的地方,而且可能不是。

检查您的网页,检查标题何时到达您的浏览器。

关于您收到的问题的评论,使用ISO5并不好,因为您需要多个ISO5系列。您必须使用Unicode编码,在大多数情况下,最好是utf-8。此外,这不是关于你使用哪个MySQL库,除非该库有一些已知的错误,这些错误对于旧的东西来说是不太可能的。 :)你仍然应该使用任何推荐的最佳做法;但您当前的问题与您使用的库无关。恶意在于您输入数据的方式与查看方式之间存在差异。

答案 1 :(得分:0)

确保您的网页标题中包含此元

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

此外,您可以在连接到db后立即尝试执行此查询:

"SET NAMES 'utf8'"

希望这会有所帮助。干杯