与PDO的utf-8字符集

时间:2015-05-20 13:00:18

标签: php mysql pdo utf-8

我试图在php文件中显示一些印度语字符(印地语,泰米尔语等),从MYSQL数据库中获取数据。

它适用于mysqli_query,但对于PDO,字符显示为垃圾值。我无法弄清楚为什么,因为我已经设置了所有可能的方面来使用utf-8

这是我的连接字符串:(我使用 PHP版本5.6.8

$db_connection = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8;', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, 
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

在做了一些研究后,我发现了utf8_decode函数,并决定尝试一下。但是,它只能部分工作。

这些是结果(如标记所示)

PDO result without utf8 decoding:
आज सदीओ के बाद खà¥à¤¦à¤•à¥‹ हम संभाले हà¥à¤... 

PDO result with utf8 decoding:
��?��? सद��?��? ��?��? बाद ��?ुद��?��? हम स��?भाल��? हुए... 

MYSQLI_QUERY:
आज सदीओ के बाद खुदको हम संभाले हुए...

由于只有PDO出现此问题,我假设我的数据库和标题都很好。如果需要更多代码,请告诉我(查询是标准数据库调用)。

编辑:关于utf-8设置,我已经完成了以下步骤:

  1. 设置DSN - charset=utf8;
  2. 将其添加到PDO的选项数组 - PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
  3. 通过PDO对象' exec功能
  4. 进行设置

    $db_connection->exec("SET NAMES utf8"); $db_connection->exec("SET CHARACTER SET utf8");

0 个答案:

没有答案