2012-05-23 86 views
3

我的表看起來像這 -PHP的MySQL的特殊字符

province_id int(11)     
province_title char(200) utf8_general_ci 
parent int(8) int(2) 

我已經插入了很多phpMyAdmin的(而不是從PHP頁面)的直接數據。但是當我檢索這些數據並在php頁面中顯示它們時,則會出現特殊字符的問題。

喜歡 -

Québec shows - Qu�bec. 

我的HTML頭的樣子 -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

我想在插入數據的問題可能發生。我怎麼能在phpmyadmin中轉換這些數據?任何幫助?

+0

你真的想用char(200)嗎? DBMS將使用很多填充和浪費磁盤空間。爲什麼不使用varchar來代替?另外,如果你改變了varchar,並且如果你打算在父列上搜索(例如,在尋找孩子的時候),你可能希望在varchar之前把它作爲固定寬度,像ints列一般先去使搜索更快)。 – megaflop

回答

4

好像你不使用UTF-8 到處讓你的數據弄亂在某一點。這取決於你在做什麼,你就必須更改/添加以下點中的一個或多個(最有可能它是SET CHARSET/mysql_set_charset至極你忘了):

  • 告訴MySQL使用UTF- 8。要做到這一點,把它添加到你的我的。CNF:

    collation_server = utf8_unicode_ci 
    character_set_server = utf8 
    
  • 與MySQL進行交互前,送出這兩querys:

    ​​3210

    ,或者讓打開連接後PHP這樣做:

    mysql_set_charset('utf8', $conn); // when using the mysql_-functions 
    mysqli::set_charset('utf8') // when using mysqli 
    
  • 集UTF-8作爲數據庫

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8'; 
    
  • 默認字符集爲表做同樣的:

    CREATE TABLE `my_table` (
        -- ... 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    
  • 假設客戶端是一個瀏覽器,以utf-8和t的形式提供您的內容他正確的標題:

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

    ,真正做到確保瀏覽器的理解,加元標記:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    
  • ,最後但並非最不重要的,告訴瀏覽器使用utf-8提交表格

    <form accept-charset="utf-8" ...> 
    
+1

+1以獲得非常完整的答案。由於不鼓勵使用MySQL,所以我建議你添加「或使用mysqli :: set_charset」。 – megaflop

+0

感謝提示,我補充說。 – oezi

0

默認情況下,MySQL服務器未配置爲期望客戶端使用UTF-8編碼。

所以你如果使用PDO使用

mysql_query("SET NAMES utf8"); 

打開連接,

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
); 

$dbh = new PDO($dsn, $username, $password, $options); 
0

如果它看起來不錯,當你看到在phpMyAdmin中的數據的問題可能是文件本身的文本enconding。

使用Eclipse(Edit»Set Encoding)或Notepad ++(Encoding)來確認您在文件中有正確的編碼。