使用MySql编码错误

时间:2015-12-11 15:50:24

标签: php mysql character-encoding

我有一个像这样的

的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;

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

我页面上的Charset是<meta charset="utf-8"> 和'texte_fr'有搭配utf8_general_ci(我试过utf8_unicode_ci,但它是一样的!)

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

感谢您的帮助......

1 个答案:

答案 0 :(得分:1)

您的整个行代码具有相同的字符集以避免字符显示不正确的问题非常重要。

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

<强>接头

  • 将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。请注意,charset 与归类相同。

    您可以通过为每个数据库和表格运行一次下面的查询(例如在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 ++编写代码,可以在&#34;格式&#34;下拉任务栏。您应该使用charset UTF-8 w/o BOM

您还可以查看此StackOverflow帖子:UTF-8 all the way through