簡體   English   中英

存儲的非英文字符,得到“ ?????” -MySQL字符集問題

[英]Stored non-English characters, got '?????' - MySQL Character Set issue

我正在工作的網站位於波斯語,所有文本均顯示為?????。 (問號)。 我將數據庫表的排序規則更改為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 . " =&gt; " . $table . " CONVERTED<br />";
    }
}
?>

壞消息。 但首先,請仔細檢查:

SELECT col, HEX(col)...

查看表格中的內容。 如果十六進制顯示3F ,則數據消失。 正確保存,對dal角色應該是十六進制D8AF ; hah是十六進制D8AD

發生了什么:

  • 您有utf8編碼的數據(很好)
  • SET NAMES latin1生效(默認,但錯誤)
  • 該列已聲明為CHARACTER SET latin1 (默認值,但錯誤)

當你INSERTed的數據,它被轉換為latin1,它不具有值波斯語字符,所以問號代替他們。

解決方法(針對將來的“ INSERT”):

  • 使用mysqli_ *接口而不是已棄用的mysql_ *接口重新編碼您的應用程序。
  • utf8編碼的數據(良好)
  • mysqli_set_charset( 'UTF8')
  • 檢查列和/或表的默認值是否為CHARACTER SET utf8
  • 如果要顯示在網頁上, <meta...utf8>應該在頂部附近。

上面的討論是關於CHARACTER SET ,字符的編碼。 現在獲取COLLATION的技巧,該技巧用於比較和排序。

如果希望將它們等同對待:'بِسْمِ'='بسم',則將utf8_unicode_ci(而不是utf8_general_ci)用於COLLATION

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM