2015-12-11 61 views
1

我有這樣錯誤編碼與MySQL

CREATE TABLE `table_contenu` (
    `id_contenu` int(10) UNSIGNED NOT NULL, 
    `id_rubrique` int(10) UNSIGNED NOT NULL, 
    `id_membre` varchar(250) NOT NULL, 
    `id_contenu_type` int(10) UNSIGNED NOT NULL, 
    `titre_fr` varchar(128) NOT NULL, 
    `titre_en` varchar(128) NOT NULL, 
    `resume_fr` text NOT NULL, 
    `resume_en` text NOT NULL, 
    `texte_fr` text NOT NULL, 
    `texte_en` text NOT NULL, 
    `date_start` date NOT NULL, 
    `date_end` date NOT NULL, 
    `calendrier` varchar(5) NOT NULL DEFAULT 'false', 
    `une` varchar(5) NOT NULL DEFAULT 'false', 
    `ordre` smallint(5) UNSIGNED NOT NULL, 
    `flag` varchar(5) NOT NULL DEFAULT 'true', 
    `date_maj` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

一個MySQL表結構在我的網站我有一個表單提交數據

的字符集我的網頁上<meta charset="utf-8"> 和「texte_fr」有在搭配utf8_general_ci(我試過用utf8_unicode_ci,但它是相同的!)

爲什麼當我提出這個詞「降神」這個詞看起來「小號éances'在數據庫中?

感謝您的幫助......

+0

1.可以將SQL連接設置爲特定的字符集(根據您使用的是哪個API - 「mysqli_」或PDO?)。 2. PHP頭文件也需要設置:'header('Content-Type:text/html; charset = utf-8');'。 – Qirel

+0

請發佈您的數據庫代碼,因爲它可能是你沒有通過PHP設置排序規則:http://stackoverflow.com/questions/2159434/set-names-utf8-in-mysql – DataHerder

回答

1

重要的是,你的整個行代碼具有相同的字符集,以避免出現問題,其中的字符顯示不正確。

下面是一些必須設置爲特定字符集的東西的列表。

集管

  • 以HTML和PHP報頭中的字符集設置爲UTF-8
    • PHP:header('Content-Type: text/html; charset=utf-8');
      (PHP頭具有任何種類的輸出之前被放置(回波,空格,HTML))

連接

  • 您還需要在連接本身指定的字符集。
    $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
  • 庫MySQLi
    • PDO(在對象本身指定)(直接放置在創建連接之後)
      *對於OOP:$mysqli->set_charset("utf8");
      *有關過程:mysqli_set_charset($mysqli, "utf8");
      (其中$mysqli是MySQLi連接)
    • MySQL的depricated,你應該轉換爲PDO或庫MySQLi):(直接放置在創建連接後)
      mysql_set_charset("utf8");

數據庫

  • 數據庫及其所有表必須設置爲UTF-8。請注意,字符集是而不是與排序規則相同。

    你可以做到這一點的(在phpMyAdmin爲例)每個數據庫和表文件編碼

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

運行下面 查詢一次
  • It .php文件本身是UTF-8編碼也很重要。如果您使用Notepad ++編寫代碼,可以在任務欄的「格式」下拉列表中完成。你應該使用字符集UTF-8 w/o BOM

你也可以看看這個StackOverflow後:UTF-8 all the way through

+0

感謝您的反饋。 )) – Chris

+0

@Chris如果你使用'mysql_',我強烈建議你轉換爲'mysqli_'或PDO以獲得更好的安全性;-)'mysql_'是過時和不推薦,不要提及*在PHP7中完全刪除*。 – Qirel

+0

是的,我知道但在我嘗試解決字符集之前。我只是把mysql_set_charset(「utf8」),但現在當我想修改我的textarea形式的'我'的數據。在使用mysql_set_charset(「utf8」) – Chris