3

我的桌子是这样的——

province_id int(11)                  
province_title char(200) utf8_general_ci 
parent int(8) int(2)

我直接从 phpMyadmin 插入了很多数据(不是从 php 页面)。但是当我检索这些数据并在 php 页面中显示它们时,特殊字符就会出现问题。

像-

Québec shows -  Qu�bec.

我的 html 标头看起来像 -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我认为问题可能是在插入数据时发生的。如何在 phpmyadmin 中转换这些数据?有什么帮助吗?

4

4 回答 4

4

似乎您并没有在任何地方使用 utf-8,因此您的数据在某些时候会变得混乱。根据您的具体操作,您必须更改/添加以下一项或多项(很可能是您忘记的SET CHARSET/ ):mysql_set_charset

  • 告诉 MySQL 使用 utf-8。为此,请将其添加到您的 my.cnf:

    collation_server = utf8_unicode_ci
    character_set_server = utf8
    
  • 在与 mysql 交互之前,发送这两个查询:

    SET NAMES 'utf8';
    CHARSET 'utf8';
    

    或者,或者,让 php 在打开连接后执行此操作:

    mysql_set_charset('utf8', $conn); // when using the mysql_-functions
    mysqli::set_charset('utf8') // when using mysqli
    
  • 将 UTF-8 设置为数据库的默认字符集

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
    
  • 对表格执行相同的操作:

    CREATE TABLE `my_table` (
      -- ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • 假设客户端是浏览器,将您的内容作为 utf-8 和正确的标头提供:

    header('Content-type: text/html; charset=utf-8');
    

    为了确保浏览器能够理解,添加一个元标记:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    
  • 最后但同样重要的是,告诉浏览器使用 utf-8 提交表单

    <form accept-charset="utf-8" ...>
    
于 2012-05-23T14:22:33.057 回答
0

问题可能是您连接到 MySQL 的字符集。见mysql_set_charsetmysqli::set_charset

于 2012-05-23T14:21:49.560 回答
0

MySQL 服务器未配置为默认来自客户端的 UTF-8 编码。

所以你必须使用打开连接

mysql_query("SET NAMES utf8");   

如果您使用的是 PDO,

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);
于 2012-05-23T14:22:13.387 回答
0

如果在 phpmyadmin 中看到数据时它看起来没问题,则问题可能出在文件本身的文本编码上。

使用 Eclipse(编辑 » 设置编码)或 Notepad++(编码)来确认您在文件中具有正确的编码。

于 2012-05-23T14:22:54.467 回答