[英]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.