簡體   English   中英

我應該使用哪種排序規則將這些國家/地區名稱存儲在MySQL中?

[英]Which collation should I use to store these country names in MySQL?

我正在嘗試在mySQL數據庫中存儲國家/地區列表。

我在存儲以下非英語名稱時遇到問題:

  • 聖多美和普林西比
  • 薩爾瓦多共和國

它們與奇怪的字符一起存儲在數據庫中,(因此在我的HTML頁面中奇怪地輸出了)。

我嘗試對數據庫和MySQL連接排序規則使用排序規則的不同組合:

“顯而易見的”設置是將utf8_unicode_ci用於數據庫和連接信息。 令我驚訝的是,這並沒有解決問題。

有誰知道如何解決這個問題?

[編輯]

事實證明,問題不在於排序規則,而在於col指出的編碼。 我注意到在命令行中,我可以鍵入兩個單獨的命令:

SET NAMES utf8

followed by

[QUERY]

其中[QUERY]是我用來檢索名稱的SQL語句,並且可以正常工作(名稱不再混亂)。 但是,當我以編程方式(即通過代碼)執行相同的操作時,仍會得到錯誤的名稱。 我嘗試將這兩個語句合並在一起:

SET NAMES utf8; [QUERY]

在命令行中,再次返回正確的字符串。 再一次,當我通過代碼嘗試相同的語句時,我得到了錯誤的值。

這是我的代碼的摘要:

$mysqli = self::get_db_connection();
$mysqli->query('SET NAMES utf8');

$sql = 'SELECT id, name FROM country';

$results = self::fetch($sql);

the fetch method is:

    private static function fetch($query)
    {
        $rows = array();

        if (!empty($query))
        {
            $mysqli = self::get_db_connection();

            if ($mysqli->connect_errno)
            {
                self::logError($mysqli->connect_error);
            }
            else
            {
                if ($result = $mysqli->query($query))
                {
                    if(is_object($result)){
                        while ($row = $result->fetch_array(MYSQLI_ASSOC))
                            $rows[] = $row;
                        $result->close();
                    }
                }
            }
        }
    return $rows;
    }

誰能發現我可能正在做的那件事錯了?

為了澄清起見,頁面中的HTTP標頭已正確設置為“ Content-type”:“ text / html; 字符集= UTF-8'

所以那不是這里的問題。

如果您在任何地方都使用uf8 *,它將起作用-好像您忘記了任何東西

*無處不在意味着: 對於數據庫排序規則和-連接,對於(php?)腳本文件,以及對於發送到瀏覽器的頁面(通過設置元標記或更好地設置uftf-8標頭)

實際上, collation不會影響任何種類。 這是用於排序和比較的東西,而不是重新編碼的東西。
它負責字符本身的encoding

因此,您的問題不是來自表排序規則,而是來自連接編碼

SET NAMES utf8

查詢應該解決問題,至少可以為新插入的數據

暫無
暫無

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

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