我正在处理的网站是波斯语,所有文字都显示为????? (问号)。 我将我的数据库表的排序规则更改为UTF8_general_ci,但它仍显示???
我运行了以下脚本来更改所有表,但这不起作用。
我想知道我做错了什么
<?php
// your connection
mysql_connect("mysql.ord1-1.websitesettings.com","user_name","pass");
mysql_select_db("895923_masihiat");
// convert code
$res = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($res))
{
foreach ($row as $key => $table)
{
mysql_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci");
echo $key . " => " . $table . " CONVERTED<br />";
}
}
?>
答案 0 :(得分:0)
坏消息。但首先,仔细检查:
SELECT col, HEX(col)...
查看表格中的内容。如果十六进制显示3F
,则数据消失。正确存储,dal
字符应为十六进制D8AF
; hah
为十六进制D8AD
。
发生了什么:
SET NAMES latin1
生效(默认,但错误)CHARACTER SET latin1
(默认,但错误)当你INSERTed
数据时,它被转换为latin1,它没有波斯语字符的值,所以问号替换了它们。
治愈(对于未来的“INSERT”):
CHARACTER SET utf8
<meta...utf8>
应该在顶部附近。上面的讨论是关于字符编码的CHARACTER SET
。现在提供COLLATION
上的提示,用于比较和排序。
如果你希望这些被视为相同:'بسم'='بسم',那么对COLLATION
使用utf8_unicode_ci(而不是utf8_general_ci)。