无法从mysql中检索utf8编码值

nan*_*ash 2 php mysql utf-8

我有这样的问题,先来看看mysql table =>

CREATE TABLE IF NOT EXISTS users(
id int(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40) CHARSET utf8 COLLATE 'utf8_unicode_ci' NOT NULL,
surname VARCHAR(40) CHARSET utf8 COLLATE 'utf8_unicode_ci' NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)

它正在成功存储数据,但是当我试图将此信息检索到我的.php文件(编码也是utf8)时,它仍然显示我的问号(?????),为什么?我该如何解决?

UPDATE

我做得不好的东西.所以我有两个php文件,一个是classA.php文件,我在其中定义了从数据库中检索信息的类,我将这个文件(classA.php)包含在我想看的default.php文件中数据.我和上面写的完全相同,我正在写作

header('Content-Type: text/html; charset=UTF-8');
Run Code Online (Sandbox Code Playgroud)

在default.php的第一行,但它仍然不起作用,感谢建议:))

第二次更新

这个脚本我在classA.php文件中,其编码默认类似于default.php文件编码.我刚刚在第一行添加了default.php文件

header("Content-Type: text/html; charset=UTF-8");
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.

第三次更新

sql =>

create table ok(
id int(2) not null auto_increment primary key,
name varchar(20) charset utf8 not null);
Run Code Online (Sandbox Code Playgroud)

和PHP文件

<?php
 header('Content-Type: text/html; charset=UTF-8');
 ?>
 <!DOCTYPE html>
 <html>
 <head>
        <title>hello</title>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
     <body>


     <?php
        $con = mysqli_connect("host","user","pass","db");

       if (mysqli_connect_errno()==0){
       if ($r = mysqli_query($con,"SELECT * FROM ok")){
    mysqli_set_charset($con,"utf8");
    while ($d = mysqli_fetch_assoc($r)){
        echo $d['name'] . "<br>";
           }
           }
          }

            if (isset($con)){
               mysqli_close($con);
             }
             ?>


               </body>
               </html>
Run Code Online (Sandbox Code Playgroud)

我在ok表中插入了这个=>

insert into ok(name) values("one"),("????"),("two"),("???");
Run Code Online (Sandbox Code Playgroud)

PS.特殊字符是格鲁吉亚语:)

它导致英文字符很好和格鲁吉亚人带问号:(

它无论如何都不起作用:(

Nad*_* S. 7

这一事实的PHP文件是UTF-8并不一定意味着从/去未来数据的数据库是UTF-8.

您没有提到您正在使用的扩展程序,但是:

  • 用于mysql使用mysql_set_charset($link,'utf8');

  • 对于mysqli使用mysqli->set_charset('utf8')或与上面相同mysqli_

  • 对于PDO,当您charset:utf8在DSN字符串中连接include 时.

  • @Tornike - 在创建数据库连接后(在进行查询之前)直接设置charset.您可以直接在UTF-8编码的PHP页面中插入UTF-8编码的字符串,而无需将其转换为HTML实体(&#4304;). (2认同)