如何将希伯来语值插入 php 中的 mysql 数据库

Posted

技术标签:

【中文标题】如何将希伯来语值插入 php 中的 mysql 数据库【英文标题】:How to insert an hebrew value into a mysql db in php 【发布时间】:2013-05-26 01:28:56 【问题描述】:

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

שדגשדכעשד

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

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

<meta charset="UTF-8">

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

mysql_query("SET NAMES utf8");

我正在 phpmyadmin 中查看结果。

【问题讨论】:

尝试mysql_set_charset('utf8'); 插入值之前。 @davidkonrad 同样的结果。 这可能会有所帮助***.com/questions/5287821/… 尝试在不使用 phpMyAdmin 的情况下获取和显示数据,因为它还需要具有适当的编码设置。 【参考方案1】:

检查 collat​​ion_connection:

show variables like '%collation%'

【讨论】:

对不起,我没听懂你的回答。你能添加更多细节吗?谢谢。 您需要进行一些故障排除,执行我在您的 PHP 脚本中建议的查询(并显示结果)以确保所有排序规则设置正确。【参考方案2】:

您应该确保:

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

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

【讨论】:

【参考方案3】:

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

    数据库排序规则必须是utf8_general_ci。 希伯来语表格的排序规则必须是utf8_general_ci

    在PHP连接脚本中放

    header('Content-Type: text/html; charset=utf-8');
    

    在xhtml的head标签里放

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

    如果您使用的是 MySQLi,请在选择数据库后将此代码放入连接脚本中:

    mysql_query("SET NAMES 'utf8'");
    

    如果您使用的是 PDO,请输入

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

The first answer helped me and I took it from there

【讨论】:

这很有帮助。谢谢! Sardar Raj 这对我来说是个神奇的地方:mysql_query("SET NAMES 'utf8'") +1【参考方案4】:

设置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;

OR 写查询时

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 />"; 

【讨论】:

【参考方案5】:

我想说,为了确保将值很好地传递给数据库,我会在插入数据库之前添加一个 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">
...

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

【讨论】:

【参考方案6】:

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

    数据库(all of it)排序规则必须是 utf8_general_ci。 将带有希伯来语的表格的排序规则也设置为 utf8_general_ci。 在 HTML 的“head”标签中,添加: 在您的 PHP 连接文件中,添加 连接后查询此行:conn->exec("set names utf8"); 如果您使用类,那么您可能会将“conn”作为变量。 在这种情况下,您将不得不像这样使用它: $this->conn->exec("set names utf8");

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

【讨论】:

【参考方案7】:

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

"mysql:host=$host;dbname=$db;charset=utf8"

【讨论】:

【参考方案8】:

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

$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));

【讨论】:

以上是关于如何将希伯来语值插入 php 中的 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PHP 数组中的值插入 MySQL 表?

如何将 SELECT ALL 值或 SELECTED 复选框值插入 mysql 中的不同列?

优化插入数百万条记录,MySQL 和 PHP

如何使用PHP Wordpress将沙箱Paypal返回值插入MySQL表?

如何使用插入记录将所有值 frow 行插入 mysql 数据库?

Javascript PHP/MySQL - 将数据库中的行值插入文本字段