代码之家  ›  专栏  ›  技术社区  ›  sequentiallee

字符编码不匹配

  •  1
  • sequentiallee  · 技术社区  · 14 年前

    我的脚本肯定是以UTF-8格式保存的。我正在用 "{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8" . 我的表使用innodb,并使用utf8_general_ci进行排序。我的页面和 Content-Type: text/html; charset=UTF-8 报头或 <meta> 当量。

    当使用pdo存储源代码中源自http输入或字符串文字的_ c3 a2 e2 80 9a c2 ac 根据MySQL Workbench 5.2。从数据库中检索并将其显示在页面上可以正常工作。但是在phpmyadmin和workbench中,我看到了 € .

    当使用这两个工具来存放_ e2 82 ac ,这显然是正确的utf-8表示,但是如果我尝试检索并用php输出它,会显示_?

    我的问题是,这种差异是从哪里产生的?我的网页和数据库工具是否都可以完美地工作?

    3 回复  |  直到 14 年前
        1
  •  1
  •   sequentiallee    14 年前

    DSN中的charset指令实际上适用于mssql。我只需要执行 SET NAMES . 很抱歉。

    我做到了这一点:

    parent::__construct("{$this->engine}:host={$this->host};dbname={$this->name}",
                        $this->user, $this->password,
                        array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
    
        2
  •  0
  •   nathan    14 年前

    简单地说,为Superfix将_

    问题的另一方面(更具体地说)是检查mysql character_set_server 最常见的原因是 character_set_client -还: connection charsets

    另外,重要的是要注意,等元数没有区别,你需要 总是 设置标题(“content-type:…”

        3
  •  0
  •   dan04    14 年前

    因为您的HTML页面是正确的,所以您似乎在数据库中存储了正确的数据。

    € 是不是欧元符号的UTF-8编码被错误地解释为Windows-1252。Windows工具似乎使用“ansi”编码而不是数据库编码。