2

我一直在努力解决 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_ci和进行了测试utf8_general_ci。有什么问题?顺便说一句,我有 EasyPHP 5.2.10。

4

2 回答 2

1

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

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

检查您的页面,在它们到达您的浏览器时检查标题。

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

于 2012-06-28T22:58:29.830 回答
0

确保您在页面标题中有此元数据

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

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

"SET NAMES 'utf8'"

希望这可以帮助。干杯

于 2012-06-28T23:07:58.913 回答