MySql编码错误


Wrong encoding with MySql

我有一个类似的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;

在我的网站上,我有一个提交数据的表格

我页面上的字符集是<meta charset="utf-8">"texte_fr"具有配置utf8_general_ci(我尝试过使用utf8_unicode_ci,但它是相同的!)

为什么当我提交单词"séances"时,这个单词在数据库中看起来是"séances?"?

谢谢你的帮助。。。

重要的是,整个行代码具有相同的字符集,以避免出现字符显示错误的问题。

下面列出了一些必须设置为特定字符集的内容。

标头

  • 将HTML和PHP标头中的字符集设置为UTF-8
    • PHP:header('Content-Type: text/html; charset=utf-8');
      (PHP头必须放在任何类型的输出(echo、空白、HTML)之前)

连接

  • 您还需要在连接本身中指定字符集。
    • PDO(在对象本身中指定):
      $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
    • MySQLi:(直接放置在创建连接后)
      *对于OOP:$mysqli->set_charset("utf8");
      *对于程序:mysqli_set_charset($mysqli, "utf8");
      (其中$mysqli是MySQLi连接)
    • MySQL已降级,应转换为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;

文件编码

  • 同样重要的是,.php文件本身是UTF-8编码的。如果您使用Notepad++编写代码,可以在任务栏上的"格式"下拉列表中完成。您应该使用字符集UTF-8 w/o BOM

您也可以看看这篇StackOverflow文章:UTF-8。