我一直在努力解决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。
答案 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'"
希望这会有所帮助。干杯