问题在数据库中存储阿拉伯字符

时间:2016-10-21 17:13:25

标签: php mysql database utf-8 character-encoding

我正在尝试制作一个注册表单,人们将在其中获取链接并输入其信息,然后将其存储在数据库中。不幸的是,当我尝试使用表单输入阿拉伯语信息时,它会作为未知字符存储在数据库中。

我尝试了以下但没有成功。

  • 在索引中设置默认字符集,如下所示:

    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
  • 在数据库处理程序页面中设置默认字符集:

    $cfg['DefaultCharset'] = 'utf_8';
    $cfg['DefaultConnectionCollation'] = 'utf8_general_ci';
    
  • 将数据库归类更改为utf8_general_ci

  • 将表格排名更改为utf8_general_ci

  • 导出为sql并编辑charset但我发现它已经是UTF-8了。

  • 确保我的浏览器unicode设置为UTF-8。

这就是它如何运作的一个例子:

<form action="signup.php" method="POST" class="form">
<input type="text" name="first"><br />
<input type="text" name="uid"><br />
<input type="date" name="dob"><br />

-

$first = $_POST['first'];
$uid = $_POST['uid'];
$dob = $_POST['dob'];

$sql = "INSERT INTO students (first, uid, dob)
 VALUES ('$first','$uid', '$dob')";

$result = mysqli_query($conn, $sql);

并且它们通过所需文件连接以连接到数据库。

$cfg['DefaultCharset'] = 'utf_8';
$cfg['DefaultConnectionCollation'] = 'utf8_general_ci';

$conn = mysqli_connect("localhost", "root", "", "test2");

if (!$conn ) {
    die("Connection failed: ". mysqli_connect_error());

}

不知道造成这种情况的原因是什么,我需要快速修复。

它的外观如何:https://i.stack.imgur.com/xiQwJ.png

2 个答案:

答案 0 :(得分:0)

我有两个可能的建议:

通过set_charset()将您的mysqli连接设置为utf-8,如果失败,您可以使用mb_convert_encoding

例如,

if (!mysqli_set_charset($conn, "utf8")) {
    printf("Error loading character set utf8: %s\n", mysqli_error($conn));
    exit();
} else {
    printf("Current character set: %s\n", mysqli_character_set_name($conn));
}

如果失败了,或者你想同时使用两者,你​​也可以这样做:

$first = mb_convert_encoding($first, "UTF-8");
// and so forth

答案 1 :(得分:0)

我怀疑您遇到的问题与字符集有关,但每列有关。如果您在更改字符集之前创建了表格和数据库,那么可能并非所有字符集都已更改。

通过查看类似于以下内容的SHOW CREATE TABLE <tablename>输出来验证我的怀疑:

mysql> show create table arabic;
+--------+---------------------------------------------------------------+
| Table  | Create Table                                                  |
+--------+---------------------------------------------------------------+
| arabic | CREATE TABLE `arabic` (
  `words` varchar(60) CHARACTER SET latin1 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------+

请注意,列words仍然具有字符集latin1。可以像这样修改单个列:

mysql> ALTER TABLE arabic CHANGE words words VARCHAR(60) CHARACTER SET utf8;
Query OK, 0 rows affected (1.16 sec)
Records: 0  Duplicates: 0  Warnings: 0

此处的其他帖子也可能有所帮助[{3}}

示例:

mysql> ALTER TABLE arabic CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 0 rows affected (0.88 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE arabic;
+--------+---------------------------------------------------------------+
| Table  | Create Table                                                  |
+--------+---------------------------------------------------------------+
| arabic | CREATE TABLE `arabic` (
  `words` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------+
1 row in set (0.00 sec)