Php Utf-8字符显示为ISO-8859-1

Php Utf-8字符显示为ISO-8859-1,php,mysql,utf-8,latin1,Php,Mysql,Utf 8,Latin1,我在从数据库插入/读取utf8内容时遇到问题。我正在做的所有验证似乎都指向这样一个事实,即我数据库中的内容应该是utf8编码的,然而它似乎是拉丁编码的。数据最初是从CLI的PHP脚本导入的 配置: 证明: -mysql: mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Valu

我在从数据库插入/读取utf8内容时遇到问题。我正在做的所有验证似乎都指向这样一个事实,即我数据库中的内容应该是utf8编码的,然而它似乎是拉丁编码的。数据最初是从CLI的PHP脚本导入的

配置: 证明: -mysql:

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_bin        |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
-数据库

created with 
CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE SCHEMA `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ;

mysql> status;
--------------
mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

Connection id:          7
Current database:       mydb
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.51a-3ubuntu5.7-log (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 9 min 45 sec
-sql:在执行插入之前,我运行

SET names 'utf8';
-php:在进行插入之前,我使用了utf8\u encode()mb\u detect\u encodeing(),这给了我“UTF-8”。在从数据库中检索内容并将其发送给用户之前,mb_detect_encoding()也会给出“UTF-8”

验证测试: 让内容正确显示的唯一方法是将内容类型设置为拉丁语(如果我嗅探流量,我可以看到带有ISO-8859-1的内容类型标题):

这个测试显示内容是拉丁语。我不明白为什么。 有人知道吗


谢谢。

嗯,我发现
设置名称
并不是那么好。在

我通常会执行4个查询:

SET CHARACTER SET 'UTF8';
SET character_set_database = 'UTF8';
SET character_set_connection = 'UTF8';
SET character_set_server = 'UTF8';
试一试,看看这对你是否有用

哦,记住,所有的UTF-8字符
  • 在检索之前你在做什么?还有一个“集合名称utf8;”?否则,MySQL将静默地转换为连接指示为已使用的字符集
  • 如果不是这样的话,
    从表中显示完整的列是什么显示?拥有一个带有默认字符集的表并不意味着该列是空的。i、 这是有效的:

  • 您的web服务器(Apache?)为php文件设置了什么字符集?您尝试在PHP中为utf设置什么字符集?您是如何设置的?能否更具体地说明您所指的配置选项?在服务器级别,我唯一能想到的就是内容类型HTTP头,这是使用上面解释的ini_set()函数设置的。如果你有其他建议,请让我知道。
    ini_set('default_charset', 'ISO-8859-1');
    
    SET CHARACTER SET 'UTF8';
    SET character_set_database = 'UTF8';
    SET character_set_connection = 'UTF8';
    SET character_set_server = 'UTF8';
    
    CREATE TABLE test (
        `name` varchar(10) character set latin1
    ) CHARSET=utf8