在MySQL中插入阿拉伯文本

6
我正在尝试将阿拉伯文本存储到表格中,我搜索了很多但没有找到适合我的解决方案,所以这是我得到的:
$en = "OK";
$ar = "حسناً";
$link->query("INSERT INTO words (en,ar) VALUES ($en,$ar)");

问题是我插入时,阿拉伯文看起来像 حسناً,我的表格校对和 MySQL 的校对都是 utf8_general_ci,我的数据库也是如此,我还使用了 mysql_query("SET NAMES 'utf8'"); mysql_query('SET CHARACTER SET utf8');,但它没有用。


可能是在MySQL数据库中保存阿拉伯语数据的重复问题。 - Muhammad Abdul-Rahim
@MariM 所有的答案对我都没有用。 - PepsiGam3r
https://dev59.com/13VC5IYBdhLWcg3wfhGL - Marc B
3个回答

12

我最近也遇到了同样的问题。

以下是一些要点:

  • 所有属性必须设置为utf8(排序规则并非字符集)
  • 将文档保存为UTF-8格式(如果您使用Notepad ++,可以选择格式-> 转换为UTF-8)
  • PHP和HTML中的标头都应该设置为UTF-8(HTML:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 和 PHP: header('Content-Type: text/html; charset=utf-8');)
  • 连接到数据库时,也要将字符集设置为UTF-8,像这样:$link->set_charset("utf8");(直接连接后)
  • 还要确保您的数据库和表设置为UTF-8,可以像这样操作:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

请记住,每个东西都需要设置为UTF-8字符编码,否则它会插入类似于“حسناً”之类的东西。希望这可以帮到你!


1
header('Content-Type: text/html; charset=utf-8'); 解决了我的问题,谢谢。 - PepsiGam3r
很高兴能够提供帮助!如果有帮到您,请不要忘记将答案标记为正确的哦 :) - Qirel
我能否更改表列数据中的文本,即使我已经从另一个表输入了数据? - krachleur
1
如果数据已经使用损坏的编码插入,修复它并不容易。最好的方法是重新插入或更新数据。有一些工具可以强制使用UTF8,但没有一个可以100%可靠。 - Qirel
非常感谢 @Qire - krachleur

4

首先要注意数据库、表和列的设置。请检查是否已经设置了utf8_general_ciutf8_unicode_ci

此外,还需要检查连接排序规则:utf8_general_ci。

在PHP中,连接mysqli后,可以使用以下代码:

$conn->query("SET NAMES 'utf8'");

网页输出总是卡在:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

它们都是utf8_general_ci,我真的不知道问题出在哪里。 - PepsiGam3r
1
header('Content-Type: text/html; charset=utf-8'); 已经解决了我的问题,无论如何还是谢谢。 - PepsiGam3r

0

这是一个对我有效的解决方案:

  1. 创建数据库时,请选择以下排序规则:utf8_unicode_ci

  2. 从 PHP 连接到数据库时,请使用以下字符集:

    $dsn = "mysql:host=localhost;dbname=record;charset=utf8";
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接