簡體   English   中英

無法從數據庫中檢索UTF-8特殊字符

[英]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的意圖是正確的,但是實現和推理都是錯誤的。

  1. 不要在瀏覽器中無條件地輸出任何錯誤。 程序員看不到它,而用戶與此無關。
  2. 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.

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