10

我正在尝试将一个希伯来语值插入到我的 mysql 数据库中,而不是希伯来语值看起来像那样。

שד×'שדכעשד</p>

表的排序规则默认是latin1_swedish_ci,我也试过改成utf-8_general_ci,hebrew_bin,hebrew_general_ci,结果还是一样。

在我的代码中,我当然使用元标记来配置字符集:

<meta charset="UTF-8">

在我的 php 查询之前,我添加了这一行:

mysql_query("SET NAMES utf8");

我正在 phpmyadmin 中查看结果。

4

8 回答 8

19

我已经解决了我的希伯来语问题。这是一个数据库和表行/字段编码问题。这是我使用的解决方案。我从另一个答案中获得了帮助,下面给出了链接,以防有人需要。

  1. 数据库排序规则必须是utf8_general_ci.
  2. 表与希伯来语的排序规则必须是utf8_general_ci.
  3. 在 PHP 连接脚本中放

    header('Content-Type: text/html; charset=utf-8');
    
  4. 在 xhtml 头标签放

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    
  5. 如果您使用 MySQLi,请在选择数据库后将此代码放入连接脚本中:

    mysql_query("SET NAMES 'utf8'");
    

    如果您使用的是 PDO,请将

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

第一个答案对我有帮助,我从那里拿走了

于 2013-09-21T04:14:27.863 回答
6

set charset 实现解决方案

创建数据库时

CREATE DATABASE db_name
 CHARACTER SET utf8
 DEFAULT CHARACTER SET utf8
 COLLATE utf8_general_ci
 DEFAULT COLLATE utf8_general_ci
 ;

或者如果数据库已经创建

CREATE TABLE table_name(
 ...
 )
 DEFAULT CHARACTER SET utf8   
 COLLATE utf8_general_ci;

或在编写查询时

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);


$re = mysql_query('SHOW VARIABLES LIKE "%character_set%";')or die(mysql_error());
while ($r = mysql_fetch_assoc($re)) {var_dump ($r); echo "<br />";} 
于 2013-09-26T05:34:12.850 回答
4

检查 collat​​ion_connection:

show variables like '%collation%'
于 2013-05-30T12:53:03.767 回答
1

你应该确保:

  1. 你在 php 中设置了 utf-8
  2. 您在连接中使用 utf-8
  3. 您的表定义为 utf-8_general_ci
  4. 具体字段定义为 utf-8_general_ci

然后您应该能够在 phpadmin 中正确查看希伯来语或任何其他语言

于 2013-05-30T14:39:01.017 回答
0

我想说,为了确保将值很好地传递给数据库,我会在插入数据库并打印值之前添加一个 die 语句,例如:

die($_POST['thevalue']);
//insert to database.
//...

如果一切顺利,那么问题出在数据库方面,在数据库上我会尝试使用这种排序规则

| 希伯来语 | ISO 8859-8 希伯来语 | hebrew_general_ci | 1 |

根据http://dev.mysql.com/doc/refman/5.0/en/charset-mysql.html的建议。

但如果它在 php 端失败,原因可能是服务器不支持希伯来语,请确保在 html 输出文档上使用正确的元标记

...
<meta charset="ISO 8859-8">
...

让我们知道它是如何进行的,祝你好运:)

于 2013-09-26T13:22:24.057 回答
0

为了将来的使用,如果你有这个问题并且你使用的是 PDO 而不是 mysqli,你需要这样做:

  1. 数据库(全部)排序规则必须是utf8_general_ci
  2. 将带有希伯来语的表的排序规则也设置为utf8_general_ci
  3. 在 HTML 的“head”标签中,添加:< meta charset="utf-8" >
  4. 在你的 PHP 连接文件中,在连接添加Query 这一行:conn->exec("set names utf8");
  5. 如果您使用的是类,那么您可能会将“conn”作为变量。在这种情况下,您必须像这样使用它: $this->conn->exec("set names utf8");

希望这对未来有此问题并使用 PDO 的人有所帮助。祝你好运。

于 2016-09-18T15:09:51.840 回答
0

最终帮助我的是将字符集添加到连接中:

{"mysql:host=$host;dbname=$db;charset=utf8"}
于 2016-12-29T22:05:11.647 回答
-1

我想我明白了:这是我的代码:

$conn = mysqli_connect($dbserver,$dbuser,$dbpwd,$dbname);

if (mysqli_connect_errno()){
    printf("Connection failed: %s\n" , mysqli_connect_errno());
    exit();
}

printf("Initial character set: %s\n", mysqli_character_set_name($conn));

/* change character set to utf8 */
if (!mysqli_set_charset($conn, "hebrew")) {
    printf("Error loading character set hebrew: %s\n", mysqli_error($conn));
    exit();
} else {
    printf("Current character set: %s\n", mysqli_character_set_name($conn));
}
于 2020-01-06T06:32:54.037 回答