`
caihorse
  • 浏览: 144589 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

php从mysql查询数据出现乱码问题

    博客分类:
  • php
阅读更多

从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行.

解决这个问题其实很简单.

1.在建表的时候设置编码类型为gb2312_chinese_ci.

2.在PHP页面的数据库连接语句加一行mysql_query("SET NAMES 'gb2312'",$link); 例如

$db_host="localhost";
$db_user="root";
$db_password="password";
$db_name="test";

$link=mysql_connect($db_host,$db_user,$db_password);
mysql_query("SET NAMES 'gb2312'",$link);

//很多资料是那个有介绍这样些 mysql_query("SET NAMES 'gb2312'"); 很多时候是无效的
$db=mysql_select_db($db_name,$link);
$query="select * from user";
$result=mysql_query($query);

写入页面和读取页面都加入这行.这样在MYSQL里面的中文就能正常显示了.

相关资料:

从MySQL 4.1开始引入多语言的支持,而且一些特性已经超过了其他的数据库系统。
MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
查看系统的字符集和排序方式的设定可以通过下面的两条命令:!
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)
mysql> show variables like 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
上面列出的值就是系统的默认值。(很奇怪系统怎么默认是latin1的瑞典语排序方式)...
当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:
set names 'utf8';
它相当于下面的四句指令:
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
set collation_connection = utf8_general_ci
由于默认网页提交的查询是gb2312(表单页面meta里可以看到),而mysql默认将其当作utf8(可以查到此时的character_set_client=utf8),所以必然乱码。同理,mysql返回的结果是已经转换成character_set_results编码的(与表的编码无关),同样默认是utf8,而网页页面把它当gb2312处理,所以必然有标题等由数据库读出的字段是乱码而其他php部分文字不乱码的现象。

解决(by 一剑飘雪):
安装mysql5.0时要选utf8字符集(在用phpmyadmin创建数据库和字段时就不需要在整理中选utf8字符集了),并在php建立连接后发送
$link = mysql_connect('localhost', 'root', 'root');
mysql_query("SET NAMES 'utf8'",$link);
这时我们在网页中看到的还是乱码但已不是????了,查看网页源文件,已完全正常。用记事本打开php源文件,别存为utf8编码,再刷新网页,全部搞定了。
或者,当然还是要安装时仍要utf8安装,在php中发送set names 'gb2312',同时php文件存为记事本默认的ansi,也能正确显示中文.

但总不能每次连接时都发送一次SET NAMES 'utf8'吧,如何彻底解决还没找到方法。

这样安装mysql时缺省字符集选为utf8后又带来一个问题,我们在command.exe中进入mysql控制台后,查询结果又成了乱码,我们可以在查询前输入
mysql>set names 'gbk';

mysql>set names 'gb2312';
相当于告诉mysql客户端在使用gb2312字符集,结果就正确了,gb2312为GBK的子集.

 


 

分享到:
评论

相关推荐

    PHP+MySql中文乱码解决办法

    乱码现象通常发生在从数据库查询中文数据时,显示出来的中文变成了不可识别的符号或者问号。产生这种现象的主要原因是**编码不一致**。 1. **数据库编码与网页编码不一致**:如果MySQL数据库使用的编码与PHP网页...

    MySql数据库导入乱码

    MySql 数据库导入乱码解决方案 在使用 PHPmyadmin 导出 MySql 数据库时,经常会遇到中文乱码的...通过遵循这些步骤,我们可以轻松地解决 MySql 数据库导入中文乱码的问题,并确保我们的数据库数据正确地导出和导入。

    mysql汉字乱码问题

    总之,解决MySQL中的汉字乱码问题需要从多个层面进行检查和调整,确保字符集在整个数据处理链路中的一致性。理解字符集和编码的概念,以及它们在MySQL中的应用,对于避免和解决这类问题至关重要。

    MySQL存数据时乱码解决

    在MySQL数据库中遇到乱码问题通常涉及到字符编码设置不一致或不正确的情况。当数据存入数据库时出现乱码,这可能是由于在数据传输、存储或显示的过程中,字符集配置不匹配导致的。下面我们将详细探讨如何解决MySQL中...

    PHP+MySql中文乱码解决方案

    在使用PHP与MySQL进行Web开发的过程中,中文乱码问题是常见的一个问题。通常情况下,这主要是由于系统各部分(如PHP脚本、MySQL数据库、操作系统等)之间的字符编码设置不一致所引起的。解决乱码问题的关键在于确保...

    php mysql excel 乱码终极处理

    在进行PHP开发过程中,尤其是在处理Excel文件并将其数据导入MySQL数据库时,经常会遇到乱码问题。这主要是由于不同环节间的字符编码不统一所导致的。具体来说,可以从以下几个方面来理解乱码产生的原因: 1. **...

    php读取mysql中文数据出现乱码的解决方法

    解决方法:创建数据库的时候,MySQL 字符集选择’UTF8’,MySQL 连接校对选择utf8_general_ci,这样创建的数据库用来存储中文肯定没有问题,否则,你的中文首先在MySQL中就是乱码,更不要期望它会给你在PHP页面中...

    PHP向mysql插入中文乱码问题,php文件内容写入数据库!

    在PHP开发过程中,遇到中文...总之,解决PHP向MySQL插入中文乱码问题,需要确保数据库、PHP连接、文件编码以及数据处理过程中的编码一致性。遵循以上步骤,可以有效地避免中文乱码问题,确保数据正确无误地写入数据库。

    MySQL乱码解决方案数据库乱码

    在处理MySQL数据库时,遇到字符集编码不一致导致的数据乱码问题非常常见。这不仅会影响数据的正确显示,还可能导致数据丢失或损坏。根据提供的标题、描述、标签以及部分内容来看,本文将围绕MySQL乱码问题进行深入...

    MySQL 远程访问及中文乱码问题

    在开发工具(如 MySQL Workbench、phpMyAdmin 等)中,也要确保它们的字符集设置与数据库一致,以避免在输入或显示数据时出现问题。 在进行这些操作时,务必注意安全性和数据一致性。修改数据库配置和权限可能会...

    Mysql中文乱码问题解决方案

    MySQL数据库在处理中文字符时,有时会出现乱码问题,这主要与字符集设置不正确有关。本文将深入探讨MySQL中文乱码问题的原因、解决方法,以及如何在创建数据库和表时避免这类问题。 首先,我们要了解字符集的概念。...

    mysql乱码解决方法

    当从MySQL 4.1以下版本升级到4.1及以上版本时,可能会出现字符集兼容性问题,导致乱码。解决方法包括: - 确保所有数据库、表、字段的字符集设置为UTF-8。 - 如果是从非UTF-8编码的数据导入,需要先将数据文件...

    mysql乱码问题解决

    当从外部导入数据到MySQL数据库时,为了避免出现乱码问题,可以采取以下措施: 1. **确保数据文件的编码格式正确**: - 在导入数据之前,确认数据文件(如CSV文件)的编码格式为`utf-8`。 - 如果数据文件的编码...

    解决Linux平台上php与mysql通讯产生中文乱码问题.docx

    确保在开发过程中始终关注字符集的统一,避免因编码不匹配导致的数据乱码。同时,也要注意在开发环境中使用统一的文本编辑器和IDE,确保它们都支持并正确设置UTF-8编码,以减少编码问题的发生。

    MYSQL字符集与乱码问题分析

    针对“mysql客户端插入中文内容后再查询却返回乱码”等问题,解决策略通常包括: - 确保客户端和服务器端的字符集一致; - 使用正确的字符集进行数据导入和导出; - 在连接数据库时明确指定字符集; - 更新数据库表...

    mysql+php中文乱码问题及mysql时间函数.pdf

    MySQL 和 PHP 在处理中文字符时可能会遇到乱码问题,这主要与字符编码设置不一致有关。为了解决这个问题,我们需要确保整个系统从数据库到前端页面的每个环节都使用相同的字符编码,通常推荐使用 UTF-8。 1. **...

    case乱码解决

    mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法

Global site tag (gtag.js) - Google Analytics