热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MYSQL4.1下的网站乱码问题解决方法

MYSQL4.1下的网站乱码问题解决方法,涉及到字符编码GBK和UTF-8,以及数据库软件mysql的版本。MYSQL4.1下的网站乱码问题解决方法--
MYSQL4.1下的网站乱码问题解决方法,涉及到字符编码GBK和UTF-8,以及数据库软件mysql的版本。

MYSQL4.1下的网站乱码问题解决方法      
 
--摘自曼波驰誉(http://www.allknow.cn)
(略有修改和简化)

网站成功转移,碰上了这个问题,以下是详细解决方法,有类似或同样困境的朋友可以参考一下。

1:空间信息

新空间PHP信息如下:

PHP built On:  略
Database Version:  4.1.20 
PHP Version:  4.3.9 
Web Server:  Apache/2.0.52 (Red Hat) 
WebServer to PHP interface:  apache2handler 
Joomla! Version:  Joomla! 1.0.12 Stable [ Sunfire ] 25 December 2006 01:00 UTC 
......

原空间PHP信息如下:

PHP built On:  略 
Database Version:  4.0.25-standard-log 
PHP Version:  4.3.11 
Web Server:  Apache/1.3.34 (Unix) mod_gzip/1.3.26.1a mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 PHP/4.3.11 FrontPage/5.0.2.2635 
WebServer to PHP interface:  apache 
Joomla! Version:  Joomla! 1.0.12 Stable [ Sunfire ] 25 December 2006 01:00 UTC 
......
2:出现的问题:
通过phpmyadmin导出在原空间的数据库,重新导入到新空间数据库里,一次ok,无报错提示。尽管导出的sql文件是utf8编码,但在新数据库里查看内容条目全是乱码,前台浏览器utf8编码下,内容除了语言文件里的中文文字外,所有内容条目都是乱码,惨不忍睹。
 
3:乱码原因分析

现在多数host装的还是MySQL 4.0x 版本以下,如果升级到了4.1x 或者移动到使用4.1x 的主机上,估计会遇到一些问题。有很多国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。

一是数据导入。在phpMyAdmin内导入后,发现中文变成了乱码。搜索学习后,了解到需要设置数据库的collation (校勘),如果你的数据库是utf-8的,设置为utf8_general_ci就可以了。

二是,即使正确导入了,在phpMyAdmin里也能正确显示,但joomla页面上显示的文章内容都是“???”,而模板里面的汉字都能正常显示。这让我头疼了很久。搜索到有对此的说明:

从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章”Character Set Support“后终于找到了解决方法并测试通过。

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES ‘utf8′;

但是我依旧不知道,如何,在何处让joomla运行这个SQL语句。但是觉得这个经验会对别人有用。记得有人用email和我讨论过这样子的中文显示问题,但是我那时哪里知道问题出在MySQL 4.1x上。比如在win2k下面使用的是mysql4.1,php5.0.3都是乱码。开源软件还是用稳定的老版本较好,各种系统都兼容。用mysql4.0.23和php4.3.10。

4:有效解决方法

1 先说我这次转换空间乱码解决方法,对了,我主系统用的是joomla! 1.0.12英文原版。首先打开你导出的那个sql文件,在最上面添加SET NAMES utf8; 然后搜索到TYPE=MyISAM 有的可能是TYPE=MyISAM DEFAULT CHARSET=latin1 全部替换成TYPE=MyISAM DEFAULT CHARSET=utf8 以utf8编码保存后重新导入到新空间的数据库里,这样从数据库里查看到的内容都是正常中文显示了,但前台还是一片乱码,似乎问题没有找到根源。这里把这个步骤写上,只是说明我的确这样操作过,并且还有些效果。

经过艰苦的查找资料 搜索 尝试,终于发现了解决乱码的最后一道门。请打开includes下的database.php文件,找到102行的代码

//@mysql_query("SET NAMES 'utf8'", $this->_resource);

将前面的注释去掉变成

mysql_query("SET NAMES 'utf8'", $this->_resource);

保存上传,查看网站前台,一切正常,再无乱码出现。没想到该版本的程序里已经考虑到这个问题了,只需去掉两个字符即可解决问题!

5:另一个解决方法:

我在网上还看到了另一个乱码解决方法,不知道是针对什么版本的,我没有测试过,供大家参考。该方法如下

原作者gudai [原创]解决mysql4.1的中文乱码问题

数据库为utf8编码,存中文信息若干。乱码出现在Linux机器上。windows上面没有这个问题。修改database.php,的function database,增加如下三行。

$q = "SET NAMES 'utf8' ";
$this->setQuery($q);
this->Query($q);

如果你是gb的,请改utf8位gb2312.
改后的function

        function database( $host='localhost', $user, $pass, $db, $table_prefix ) {
                // perform a number of fatality checks, then die gracefully
                if (!function_exists( 'mysql_connect' )) {
                        //or die( 'FATAL ERROR: MySQL support not available.  Please check your configuration.' );
                        $mosSystemError = 1;
                        $basePath = dirname( __FILE__ );
                        include $basePath . '/../configuration.php';
                        include $basePath . '/../offline.php';
                        exit();
                }
                if (!($this->_resource = @mysql_connect( $host, $user, $pass ))) {
                        //or die( 'FATAL ERROR: Connection to database server failed.' );
                        $mosSystemError = 2;
                        $basePath = dirname( __FILE__ );
                        include $basePath . '/../configuration.php';
                        include $basePath . '/../offline.php';
                        exit();
                }
                if (!mysql_select_db($db)) {
                        //or die( "FATAL ERROR: Database not found. Operation failed with error: ".mysql_error());
                        $mosSystemError = 3;
                        $basePath = dirname( __FILE__ );
                        include $basePath . '/../configuration.php';
                        include $basePath . '/../offline.php';
                        exit();
                }
                $this->_table_prefix = $table_prefix;
                $this->_ticker = 0;
                $this->_log = array();
                $q = "SET NAMES 'utf8' ";
                $this->setQuery($q);
                $this->Query($q);
        }



 


推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
author-avatar
as16as1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有