2010-05-31 84 views
6

有人可以解釋我的時候我都設置爲UTF-8我不斷收到那些該死UTF-8 MySQL和字符集

的MySQL
Server版本:44年5月1日
MySQL的字符集:UTF-8的Unicode(UTF-8)

我創建一個新的數據庫

名稱:utf8test
校對:utf8_general_ci
MySQL連接校對:utf8_general_ci

我的SQL是這樣的:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 

CREATE TABLE IF NOT EXISTS `test_table` (
    `test_id` int(11) NOT NULL, 
    `test_text` text NOT NULL, 
    PRIMARY KEY (`test_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

INSERT INTO `test_table` (`test_id`, `test_text`) VALUES 
(1, 'hééélo'), 
(2, 'wööörld'); 

我的PHP/HTML:

<?php 
$db_conn = mysql_connect("localhost", "root", "") or die("Can't connect to db"); 
mysql_select_db("utf8test", $db_conn) or die("Can't select db"); 

// $result = mysql_query("set names 'utf8'"); // this works... why?? 
$query = "SELECT * FROM test_table";   
$result = mysql_query($query); 

$output = ""; 
while($row = mysql_fetch_assoc($result)) { 
    $output .= "id: " . $row['test_id'] . " - text: " . $row['test_text'] . "<br />"; 
} 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html lang="it" xmlns="http://www.w3.org/1999/xhtml" xml:lang="it"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>UTF-8 test</title> 
</head> 
<body> 
<?php echo $output; ?> 
</body> 
</html> 

回答

1

我設置好一切爲UTF-8

不太。
你必須告訴mysql你的客戶端的編碼。

事實上,你不必在utf-8中設置「全部」。你可以將你的表格設置爲latin1並以utf-8格式輸出。或者相反。
非常靈活。

但您必須明確設置客戶端的編碼。 所以,這就是爲什麼它與set names utf8。因爲這個查詢設置了客戶端的編碼。讓Mysql知道數據必須以utf-8發送。非常明智,呵呵?我也不得不提到你的SQL轉儲。它需要相同的設置。只是在頂部的某處設置名稱。因爲你也從一些客戶端發送這些查詢。此客戶端的編碼也需要設置。

還有一件事要提到:確保您的服務器在Content-type標頭中發送正確的編碼。你也沒有將它設置爲UTF-8。

+0

謝謝Col. Ok讓我看看你正在談論的SQL dump。除了我的例子中的$ result = mysql_query(「set names'utf8'」)這行之外,我還有做另一個名字爲utf8的?請問在哪裏以及如何? – FFish 2010-05-31 18:34:29

+0

@FFish在你輸入你的sql命令的同一個地方,從SET SQL_MODE開始。是它的MySQL控制檯或什麼?這只是一個簡單的規則:每次插入或選擇數據時 - 必須設置客戶端編碼。 – 2010-05-31 18:39:08

+0

好吧,SQL轉儲,現在我明白你的意思了。乾杯 – FFish 2010-05-31 20:48:05

6

嘗試設置charachter編碼mysql_connect功能這樣以後:

mysql_query ("set character_set_client='utf8'"); 
mysql_query ("set character_set_results='utf8'"); 

mysql_query ("set collation_connection='utf8_general_ci'"); 
+1

可以縮短爲簡單'SET NAMES utf8' – 2010-05-31 13:53:55

+0

是的,我知道。我寫了MySQL 4+解決方案。 – antyrat 2010-05-31 13:55:23

+0

4.0不瞭解這些設置。 4.1瞭解集合名稱 – 2010-05-31 14:01:28

1

我沒在連接到數據庫後,不會看到"SET NAMES 'utf8';"查詢。

試試吧,可能適合你。

1

我會說,你忘了設置你的PHP文件的內容類型編碼爲UTF-8:

header('Content-Type: text/html; charset=utf-8'); 

或者是MySQL數據庫中的編碼錯誤?

如果僅僅加載數據返回錯誤的結果,你可以使用前面提到的查詢或這行代碼,使UTF-8進行查詢:

$mysqli->set_charset('utf8'); 

我希望這是你需要的東西。