【问题标题】:Unicode characters become question marks after inserting into the databaseUnicode字符插入数据库后变成问号
【发布时间】:2011-03-23 14:52:53
【问题描述】:

当我将一些用 Unicode 编写的文本插入数据库时​​,它们变成了问号。数据库编码设置为 UTF-8。还有什么可能是不正确的?当我检查 phpMyAdmin 时,只插入了问号!

这是我用来连接数据库的代码:

define ("DB_HOST", "localhost"); // Set database host
define ("DB_USER", "root"); // Set database user
define ("DB_PASS","password"); // Set database password
define ("DB_NAME","name"); // Set database name

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection.");
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database");

mysql_set_charset('utf8',$link);
mysql_query("SET CHARACTER SET utf8");

【问题讨论】:

  • 您使用哪个模块与 MySQL 通信? mysql, mysqli, pdo-mysql, ... ?数据也是正确的 utf-8 编码的吗?您在哪里看到的字符是问号?
  • 我添加了 mysql_query("SET NAMES 'utf8'"); mysql_select_db 之后问题就解决了!

标签: php mysql unicode utf-8


【解决方案1】:

您插入的文本是否也以 UTF-8 编码?还是您的 PHP 文件不是 UTF-8?您是否将 MySQL 客户端连接设置为 UTF-8?

如果不是,那么这可能是问题的原因。

【讨论】:

    【解决方案2】:

    你怎么知道变成问号的?当您输出数据库字段时,您是否将它们视为 PHP 页面上的问号,或者在 phpMyAdmin 之类的软件中?

    无论哪种方式,问题都可能是您网页的编码而不是数据库的编码。确保添加以下行:

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

    【讨论】:

    • 您使用的字体是有助于解决此案的重要信息
    【解决方案3】:
     // First make sure your file produce UTF-8 characters
     header('Content-Type: text/html; charset=utf-8');
     // Make sure with your spelling
     // write
     mysql_query("SET CHARSET utf8");
     // Instead of
     mysql_query("SET CHARACTER SET utf8");
    
     // For some reasons
     mysql_query("SET CHARSET SET utf8");
     // It works on some servers and for other servers not. I am not sure why.
    
     // Try using mysql_set_charset("utf8"); only without mysql_query("SET CHARSET utf8");
     // For me I had the same issue with my server
     // When I used mysql_set_charset("utf8"); only --> the problem solved
     // again make sure with your spelling and try again
    

    【讨论】:

      【解决方案4】:

      对不起,你错了……

      我的朋友朱利安国王,你只需要执行:

      mysql_query("SET CHARACTER SET utf8");
      mysql_query("SET CHARSET utf8");
      mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'"); // This statement does the job!!! ;)
      

      祝你有美好的一天!

      【讨论】:

        猜你喜欢
        • 2014-02-01
        • 2015-06-17
        • 1970-01-01
        • 1970-01-01
        • 2016-11-14
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 2019-03-19
        相关资源
        最近更新 更多