【问题标题】:Accute accent MySQL - PHP - UTF-8重音 MySQL - PHP - UTF-8
【发布时间】:2013-06-02 03:57:41
【问题描述】:
  • 我已将元字符集设置为 UTF-8

    <meta charset="utf-8" />
    
  • 我已将 Notepad++ 编码设置为不带 bom 的 UTF-8

  • 我已将 MySql 的数据库排序规则设置为 ut8_general_ci

  • 我已将每个字段的排序规则设置为 utf8_general_ci

我已经完成了所有这些,但我仍然看不到重音 (é)。相反,我看到... 希望你能帮助我。谢谢!

【问题讨论】:

  • 您是否做过SET NAMES utf8 或者更好的客户端等效项(例如mysql(i)_set_charset)?

标签: php sql encoding


【解决方案1】:

一定要在数据库上运行SET NAMES utf8

示例(使用 PDO):

$pdo = new PDO('mysql:host=127.0.0.1;dbname=mydb', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

【讨论】:

  • 它告诉数据库它应该以什么字符集返回你的数据(我猜你的 cas utf-8 不是默认的)
  • 那么排序规则是什么?
  • 它用于存储您的数据。如果您的 - 比方说 - varchar 字段的排序规则设置为 ASCII,它将无法存储非 ASCII 字符(如 é、č 或 ř)。
【解决方案2】:

同时设置数据库连接的字符集。设置此参数将告诉您的数据库对象传递 UTF-8 编码的字符串,即使它们以其他方式存储在数据库中。当然,以相同的 UTF-8 格式存储数据会加快交付速度。

// tells the mysqli connection to deliver UTF-8 encoded strings.
$db = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
$db->set_charset('utf8');

// tells the pdo connection to deliver UTF-8 encoded strings.
$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8";
$db = new PDO($dsn, $dbUser, $dbPassword);

// tells the mysql connection to deliver UTF-8 encoded strings.
$db = mysql_connect($dbHost, $dbUser, $dbPassword);
mysql_set_charset('utf8', $db);

more…

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2012-06-01
    • 2011-10-03
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2012-04-11
    相关资源
    最近更新 更多