我正在阿拉伯语网站上工作,为此我想将阿拉伯语输入存储在数据库中。我已将字符集设置为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"));
但我无法将阿拉伯字符存储在我的表格中。
答案 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
。
祝你好运。