使用php中的pdo在mysql中存储阿拉伯语文本

时间:2015-10-08 07:33:58

标签: php mysql pdo

我正在阿拉伯语网站上工作,为此我想将阿拉伯语输入存储在数据库中。我已将字符集设置为utf8mb4_general_ci。当我在插入查询之前打印数据时,它显示正确的阿拉伯值。但是当我将它插入数据库时​​,它存储为اÙرÙاضâ。我在PHP中使用PDO,我还在连接字符串中将字符集设置为utf 8。

$this->pdo = new PDO($dsn, $this->settings["user"],   
$this->settings["password"], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

但我无法将阿拉伯字符存储在我的表格中。

2 个答案:

答案 0 :(得分:1)

设置客户端字符集时,必须使其与实际数据编码匹配。

因此,如果您的输入数据位于utf-8,那么一切都应该有效,但在这种情况下,您为什么要将数据库字符集设置为utf8mb4,而不是utf8

如果输入数据编码与utf-8不同,则必须设置名称以匹配此实际编码。

另外,在PDO::MYSQL_ATTR_INIT_COMMAND中设置字符集只是一种迷信。虽然在大多数情况下它是合理的,但最好通过DSN进行设置 - 它适用于所有当前支持的PHP版本。请注意,编码名称与常用名称略有不同。

关于您正在观察的奇怪字符 - 它最有可能只是测量错误。您用来浏览数据库的工具必须同时支持该编码,设置为正确显示。

以上所有都是基于

的假设
  

我将字符集设置为utf8mb4_general_ci。

语句是关于设置表字符集。

答案 1 :(得分:-2)

我不确定。但试试吧

$dbh = new PDO("mysql:$connstr",  $user, $password);
$dbh->exec("set names utf8");

并将utf8mb4_general_ci更改为utf8_general_ci。 祝你好运。