2015-12-11 54 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