[英]UTF-8 special characters not retrieved from database
我有一個MySQL數據庫,其中包含各種語言的單詞,因此將表列設置為“ utf8_unicode_ci”。 UTF-8可以包含所有可能的字符,並且unicode_ci也具有正確的排序(並且性能較低)。 當我在phpMyAdmin中瀏覽表時,所有特殊字符都看起來正常。 問題是,當我通過SQL SELECT選擇一堆名稱並將其顯示在我的網站上時,字符無法顯示/編碼不正確(看起來像Chrome中的問號,Explorer中的正方形等)。 我已經為我的網站設置了正確的編碼: <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
如果將字符粘貼到我的字符上,我也可以顯示各種字符頁。 僅在從數據庫中檢索它們時才出現問題。 php mysqli_query()會更改編碼還是SELECT查詢以某種方式使其混亂?
盡管@ user4035的意圖是正確的,但是實現和推理都是錯誤的。
SET NAMES 'UTF8'
set_charset()
SET NAMES 'UTF8'
不等於set_charset()
函數。 前者是特定的SQL查詢,不應使用后者來支持后者的功能。 更好的版本如下。
您必須使用set_charset()
方法設置連接字符集:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con=mysqli_connect("host", "user", "pw", "db");
$con->set_charset("utf8");
嘗試:
mysql_query("SET NAMES 'utf8'", $con);
之前
mysql_select_db("asdasd", $con);
連接到MySQL后,嘗試使用SET NAMES 'UTF8'
:
$con=mysqli_connect("host", "user", "pw", "db");
if (!$con)
{
die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}
/* change character set to utf8 */
if (!$con->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $con->error);
}
如手冊所述 :
SET NAMES指示客戶端將用於將SQL語句發送到服務器的字符集...它還指定服務器用於將結果發送回客戶端的字符集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.