【问题标题】:MySQL db question marks instead of hebrew characters..?MySQL db 问号而不是希伯来字符..?
【发布时间】:2011-07-14 08:31:35
【问题描述】:

我正在尝试使用 PHP 和 MySQL 构建购物车。 我在 MySQL 中的 db 是 utf8,我在 db 中的表是 utf8,

如何使用希伯来语字符?

【问题讨论】:

标签: php mysql encoding


【解决方案1】:

问号出现在哪里?这可能是数据库以外的某个地方的编码问题。

【讨论】:

  • HTML 需要使用支持希伯来语的编码生成(否则希伯来语字符需要在 HTML 中正确转义)。浏览器还需要知道使用了什么编码(通常通过 HTTP 标头和/或 META 标记)。它仍然可能是数据库问题,但在数据库中的数据和浏览器显示之间的路径中还有很多其他地方可能是问题的根源。
  • 谢谢 ted,但我已经尝试过了……当我在 Firefox 中右键单击并选择页面信息时,它显示我的页面使用 utf8,但我仍然看到问号而不是希伯来字符我的 html 中的一个 utf-8 元标记和我的标题标记中的 lang=he。还有其他建议吗?...
  • 确保在生成 HTML 的代码中使用了 UTF-8。尝试使用一些硬编码的希伯来语(不是来自数据库)来执行该代码,以确认问题出在数据库中。
  • 试过了...... 8 小时以来,我试图查看希伯来语字符的...... h1 标签我可以看到希伯来语,这就是为什么我认为问题出在 MySQL 数据库中...任何其他建议,因为我尝试了你们给我的所有建议,但没有运气。提前致谢。
【解决方案2】:

如果是编码问题(听起来确实如此),此查询会有所帮助:

SET NAMES utf8

在连接后和移动任何数据之前立即执行此查询(例如mysql_query("SET NAMES utf8"))。

More info

【讨论】:

  • 我需要在哪里执行它?我试图在我的数据库中的 phpMyAdmin 中执行它,查询它返回语法错误......我试着把;在查询结束时它不起作用...我认为问题出在 MySQL 的东西上,因为当我在 php 中回显某些内容时,我可以看到希伯来语...。
  • 好的,我试着把 mysql_query("SET NAMES utf8");在我的 php 代码中它不起作用,我尝试将查询放在 phpMyAdmin 中的 mysql 查询中,但我仍然看不到希伯来字符。这里的这个人让它工作了,但我不知道他把代码放在哪里...webmasterworld.com/php/3553642.htm
【解决方案3】:

我可以通过以下方式解决这个问题:

  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. 在连接脚本中选择数据库后放入mysql_query("SET NAMES 'utf8'");

【讨论】:

  • 很高兴你知道了。您能否将此主题标记为已解决?
  • 请注意,mysql_query("SET NAMES 'utf8'");按原样输入。
  • PDO 版本:$dbh->query("SET NAMES 'utf8'");
【解决方案4】:

您可以像这样在代码中使用 PDO:

 $db = new PDO($config['DSN'], $config['dbUserName'], $config['dbPassword']);
 $db->exec("SET NAMES 'utf8'");

确保在 'utf8' 周围包含单引号。

【讨论】:

    【解决方案5】:

    经过大量工作,我找到了一个始终有效的解决方案..: 没有 SET_NAMES。

    conn.inc.php 文件中,选择数据库并连接到它后,执行以下操作:

    if(!mysqli_set_charset($conn, 'utf8')) {
        echo 'the connection is not in utf8';
        exit();
    }
    

    ...并且在 html 中始终使用字符集 utf-8;

    这为我解决了这个问题。不需要使用set_names(),这没关系,但它让我很恼火。

    【讨论】:

      【解决方案6】:

      要在数据库列中存储非 ASCII 字符,您需要使用特定字符集定义该列。您可以在 3 个级别指定字符集:数据库、表和列。例如:

      CREATE DATABASE db_name CHARACTER SET utf8
      CREATE TABLE tbl_name (...) CHARACTER SET utf8
      CREATE TABLE tbl_name (col_name CHAR(80) CHARACTER SET utf8, ...)
      

      http://www.herongyang.com/PHP/Non-ASCII-MySQL-Store-Non-ASCII-Character-in-Database.html

      【讨论】:

        【解决方案7】:

        mysql_query('SET NAMES utf8') ..... 把这个放到 PHP 里

        【讨论】:

          【解决方案8】:

          $conn->set_charset("utf8");将其用于您的 dbconnect

          【讨论】:

            【解决方案9】:

            在我的例子中,我从转储中创建了数据库,这个命令解决了它:

            ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
            

            【讨论】:

              猜你喜欢
              • 2013-11-26
              • 1970-01-01
              • 2015-01-28
              • 2012-03-03
              • 2019-10-17
              • 1970-01-01
              • 2012-12-16
              相关资源
              最近更新 更多