PHP中文乱码解决方法

PHP中文乱码解决方法
PHP中文乱码解决方法

PHP中文乱码解决方法

一.首先是PHP网页的编码

1.php文件本身的编码与网页的编码应匹配

a.如果欲使用gb2312编码,那么php要输出头:header(“Content-Type:text/html; charset=gb2312"),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。

b.如果欲使用utf-8编码,那么php要输出头:header(“Content-Type:text/html; charset=utf-8"),静态页面添加,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。

2.php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring 扩展);或者用iconv转码。

二.PHP与Mysql的数据交互

PHP与数据库的编码应一致

1.修改mysql配置文件my.ini或https://www.360docs.net/doc/4114663667.html,f,mysql最好用utf8编码

[mysql]

default-character-set=utf8

[mysqld]

default-character-set=utf8

default-storage-engine=MyISAM

在[mysqld]下加入:

default-collation=utf8_bin

init_connect='SET NAMES utf8'

2.在需要做数据库操作的php程序前加mysql_query("set names'编码'");,编码和php编码一致,如果php编码是gb2312那mysql编码就是gb2312,如果是utf-8那mysql编码就是utf8,这样插入或检索数据时就不会出现乱码了。

三.PHP与操作系统相关

Windows和Linux的编码是不一样的,在Windows环境下,调用PHP的函数时参数如果是utf-8编码会出现错误,比如move_uploaded_file()、filesize()、readfile()等,这些函数在处理上传、下载时经常会用到,调用时可能会出现下面的错误:

Warning:move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in...

Warning:move_uploaded_file()[function.move-uploaded-file]:Unable to move''to''in... Warning:filesize()[function.filesize]:stat failed for...in...

Warning:readfile()[function.readfile]:failed to open stream:Invalid argument in..

在Linux环境下用gb2312编码虽然不会出现这些错误,但保存后的文件名出现乱码导致无法读取文件,这时可先将参数转换成操作系统识别的编码,编码转换可用mb_convert_encoding(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的上传、下载。

其实还有更好的解决方法,彻底与系统脱离,也就不用考虑系统是何编码。可以生成一个只有字母和数字的序列作为文件名,而将原来带有中文的名字保存在数据库中,这样调用move_uploaded_file()就不会出现问题,下载的时候只需将文件名改为原来带有中文的名字。实现下载的代码如下:

header("Pragma:public");

header("Expires:0");

header("Cache-Component:must-revalidate,post-check=0,pre-check=0");

header("Content-type:$file_type");

header("Content-Length:$file_size");

header("Content-Disposition:attachment;filename=\"$file_name\"");

header("Content-Transfer-Encoding:binary");

readfile($file_path);

$file_type是文件的类型,$file_name是原来的名字,$file_path是保存在服务上文件的地址。

四.再来总结一下为什么会乱码

一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:

1、文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的。记事本和Dreamweaver在打开页面时候会自动识别文件编码因而不太会出问题。而ZendStudio却

不会自动识别编码,它只会根据首选项的配置固定以某种编码打开文件,如果工作时候一不注意,用错误编码打开文件,做了修改之后一保存,乱码就出现了(我深有体会)。

2、页面申明编码:在HTML代码HEAD里面,可以用来告诉浏览器网页采用了什么编码,目前中文网站开发中XXX主要用的是GB2312和UTF-8两种编码。

3、数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。知道了WEB开发中哪些地方涉及到了编码,也就知道了乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。

五.决战一些常见的错误情况与解决:

1、数据库采用UTF8编码,而页面申明编码是GB2312,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是乱码,需要在查询前先使用:mysql_query("SET NAMES GBK");来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:mysql_query("SET NAMES UTF8");

注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。

注:事实上MYSQL的数据输入输出比上面讲的更复杂一些,MYSQL配置文件my.ini 中定义了2个默认编码,分别是[client]里的default-character-set和[mysqld]里的default-character-set来分别设定默认时候客户端连接和数据库内部所采用的编码。我们上面指定的编码其实是MYSQL客户端连接服务器时候的命令行参数character_set_client,来告诉MYSQL服务器接受到的客户端数据是什么编码的,而不是采用默认编码。

2、页面申明编码与文件本身编码不一致,这种情况很少发生,因为如果编码不一致美工做页面时候在浏览器看到的就是乱码了。更多时候是发布以后修改一些小BUG,以错误编码打开页面然后保存导致的。或者是用某些FTP软件直接在线修改文件,比如CuteFTP,由于软件编码配置错误而导致转换错了编码。

3、一些租用虚拟主机的朋友,明明上述3项编码都设置正确了还是有乱码。比方说网页是GB2312编码的,IE等浏览器打开却总是识别成UTF-8,网页HEAD里面已经申明是GB2312了,手动修改浏览器编码为GB2312后页面显示正常。产生原因是服务器Apache设定了服务器全局的默认编码,在httpd.conf里面加了AddDefaultCharset UTF-8。这时候服务器会首先发送HTTP头给浏览器,其优先级比页面里申明编码高,自然浏览器就识别错了。解决办法有2个,请管理员在配置文件自己的虚机里加上一条AddDefaultCharset GB2312来覆盖全局配置,或者在自己目录的.htaccess里配置。

总结:总之一句话,要解决PHP中文乱码最好最快的解决办法就是,页面申明的编码与数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就设定连接编码,mysql_query("SET NAMES XXX");XXX为连接编码.一定可以解决乱码的问题.

4、Win下apache用get方法传递中文参数会出错:

test.php?a=你好&b=你也好

传递参数是会导致一个内部错误

解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)

mysql乱码处理

用MS SQL和oracle9 太吃内存,有点大,全给卸载了. 安装了mysql占内存小,方便使用! version:mysql-essential-5.1.36 在MySQL Command Line Client显示中文一切正常; 在eclipse中新工程,连接到mysql,读取一个表显示: 代码: package com.mch.mysql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Mysql1 { public static void main(String[] args) { String url ="jdbc:mysql://localhost/test"; String user="root"; String password="******"; try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Connection conn= DriverManager.getConnection(url,user,password); Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from pet"); while(rs.next()){ System.out.print("name:" + rs.getString(1)); System.out.print("\t所有者:" + rs.getString(2)); System.out.print("\tbirth:" + rs.getString("birth")); System.out.println(); } rs.close(); stmt.close(); conn.close(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } 显示乱码?号.

解决openfire在使用MySQL数据库后的中文乱码问题

解决openfire在使用MySQL数据库后的中文乱码问题 openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据 存储可以采用多种数据库,如MySQL,Oracle等。 在实际使用时大家遇到最多的就是采用MySQL数据库后的中文乱码问题,这个问题十分有趣, 而且从现象上可以看出openfire内部的一些机制。 实际问题是这样的:首先启动openfire服务器,然后利用客户端或直接登录到后台新建一个帐户,为该帐户指定一些中文的属性,如姓名等。如果不重启服务器,你永远不会觉得有什么不对的地方,因为所有的中文显示都是正常的。接下来重启一下openfire,再用建立的帐号登录 客户端或进入后台管理端查看,会发现所有的中文全都变成了问号。登录到数据库中进行查看,发现所有的中文字符也均为问号,这说明了两个问题: openfire具有应用层缓存 数据库编码存在问题 解决办法其实也很简单,首先要保证你为openfire创建的数据库编码是utf8的,建表语句如下: create database openfire default character set utf8 default collate utf8_general_ci 当你原来就创建好数据库时,你可以用: alter database openfire default character set utf8 default collate utf8_general_ci; 其次,在初始化openfire数据库,即第一次配置openfire服务器时,在连接数据库那里的连 接串要加入字符编码格式,必须在连接里增加UTF8的编码要求,连接字符串设置如下: jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncoding=utf8 如果已经安装完成,这个配置也是可以改动的,直接到openfire的安装目录下,找到 conf/openfire.xml这样一个文件,打开找到如下的XML节,修改其中的serverURL即可 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncodi ng=utf8 注意:由于&具有特殊含义,因此原&符号必须被转义为&

解决PHP+mysql处理中文乱码的独家方案

解决PHP+mysql处理中文乱码的独家方案 本方案适用于所有页面文件均为php(已成功测试过),如果有混合文件读者可以亲自测试。 问题现象如下图,1所示为修复过的头部引用文件header.php,中文能正常显示,2所示为未修复过的standard.php页面文件。 一、为了解决问题,首先应该设置数据库的字符编码,如下图所示,本例将所有编码设置为UTF-8。 同样将数据库中的所有表的字符编码设置成UTF-8。

这样,数据库中可以正常显示中文字符了,如下图所示。 如果要导入外来数据,也要设置好字符编码,对于非mysql数据库的导入(如从ACCESS数据库中导入),需要设置分隔字段的字符,然后执行便可,如下图所示。 ---------------------------------------- 二、数据库的字符编码完成后,便要将页面文件的编码设置好。 这里的要点有如下三点(红色为说明文字):

为了实现上述三点要求,本例采用的方案如下: 1.创建一个数据库连接文件conn.php ,其中在开头设置header 编码,并在创建数据连接后设置SQL 请求的编码,如下图所示: 2.设置页面文件的文件类型。可以在页面文件中的标签中设置字符编 码。 2.1如果之前的字符编码为gb2312,则该文件类型为ANSI (本例使用DW 和notepad++软件,读者也可用UE 编辑软件,只不过类型显示名称不一样而已),如下图所示: 2.2将标签的编码设置成utf-8并保存文件后,再次打开,会发现文件类型变成了ANSI as UTF-8,如下图所示:

mysql数据库乱码问题

数据库读出乱码解决 一、分析常见数据库问题 修改MYSQL数据库,数据表,字段的编码(解决JSP乱码) 要解决JSP乱码,首先就要了解JSP乱码的原因 1.架设服务器安装MYSQL时的会让你选择一种编码,如果这种编码与你的网页不一致,可能就会造成JSP页面乱码 2.在PHPMYADMIN或mysql-front等系统创建数据库时会让你选择一种编码,如果这种编码与你的网页不一致,也有可能造成JSP页面乱码 3.创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成JSP页面乱码 4.创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成JSP 页面乱码 5.用户提交JSP页面的编码与显示数据的JSP页面编码不一致,就肯定会造成JSP页面乱码. 如用户输入资料的JSP页面是big5码,显示用户输入的JSP页面却是gb2312,这种100%会造成JSP页面乱码 6.字符集不正确 要注意: 1.平时你在某些网站看到的文字可能有几种编码,如你看到一个繁体字,它有可能是big5编码,也有可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点. 如果你是做一个简体编码的网页,编码定为GB2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法就是(1)将网站编码设为utf-8,这样可以兼容世界上所有字符,(2)如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK 7.JSP连接MYSQL数据库语句指定的编码不正确 8.JSP页面没有指定数据提交的编码,就会造成乱码: 所以,JSP乱码的原因无非就是以上几种,知道原因之后,要解决JSP乱码的方法也容易多了 我们一一来表达: 1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题 2.修改数据库编码,如果是数据库编码不正确:可以在phpmyadmin执行如下命令:ALTER DATABASE`test`DEFAULT CHARACTER SET utf8COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8

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

mysql+php中文显示乱码的解决mysql+php中文显示乱码的解决 建议数据库用utf8编码 问题汇总: 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP 页面乱码. 5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码. 6.PHP页面字符集不正确. 7.PHP连接MYSQL数据库语句指定的编码不正确. 使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难

了. 针对不同问题的解决方法: 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令: ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改表的编码: ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将一个表category的编码改为utf8. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改字段的编码: ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8

mysql中文乱码解决

转载:Mysql中文乱码的解决方法 第一种方法,很精辟的总结: 经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧: WINDOWS 下导入应该这样 使用MYSQL的命令 在DOS 命令下进入mysql的bin目录下,输入mysql -uroot -p密码数据库名称<要恢复的数据库, 例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样: mysql -uroot -p密码test2以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。 只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下: $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); mysql_query("SET NAMES 'GBK'"); 数据库字符集为utf-8 连接语句用这个 mysql_query("SET NAMES 'UTF8'"); mysql_query("SET CHARACTER SET UTF8"); mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");

Oracle数据库工具中文显示乱码问题的解决

Oracle数据库工具中文显示乱码问题的解决 Oracle客户端查询工具有时会有查处的结果为中文时不能正常显示,要么为乱码,要么为问号,plsql出现这种问题,以为是版本造成的,用了老的和最新的还是一样,换了另外的数据库工具也一样,但注意一点,数据其实是没有问题的,取出来显示是正常的中文,只是在工具里显示的是问号。其实问题的原理很简单,就是字符集设置不正确造成的,但如此简单的原理在解决的过程中却会遇到很多麻烦,下面结合我遇到和解决的过程,给朋友们一点思路,说不定你们跟我的问题一样,通过这篇文章不用再折腾了,很快搞定,感觉飘飘…… 首先讲讲字符集的知识,Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。 其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA.

ZHS16GBK。从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 如何查询Oracle的字符集,很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。 查询oracle server端的字符集,有很多种方法可以查出oracle server 端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dual; 结果类似如下:AMERICAN _ AMERICA. ZHS16GBK 对于查询工具结果集中的中文乱码,其实有两种情况供参考: 1.安装了服务器及配套工具,这样还出现乱码就去检查注册表中的NLS_LANG项是否设置正确,很有可能是在安装时设置了不正确的字符集造成的; 2.只安装了客户端,没有配套工具(如sqlplus等),以10g为例,注册表中是没有NLS_LANG这项的,那么要改哪?同理,还是要改字符集,不过不是在注册表中设,是要在环境变量中增加或修改,即查看windows系统环境变量是否存在NLS_LANG,若存在则修改,

SQLSERVER访问MYSQL表中文显示成乱码

错误描述:SQLSERVER访问MYSQL表中文显示成乱码,中文会显示成???? 解决思路:用的是mysql-5.1.50-win32 与odbc3.1版本的.现在改成ODBC5·1 这样转换就没有问题SQLSERVER连接MYSQL 建立链接如下: 数据库软件与ODBC软件:mysql-5.1.50-win32与ODBC5·1(注意,odbc3.1版本,会出现乱码)MYSQL数据库情况:gmp_test 第一步:先要在MYSQL进行授权,让主机能访问MYSQL数据库,设置如下: 在mysql数据库执行,语句: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.216' IDENTIFIED BY 'yxtech' WITH GRANT OPTION; 第二步:在SQLSERVER主机,设置ODBC连接,设置如下图: 第三步:在SQL SERVER 配置连接,配置语句如下 --删除连接 exec sp_dropserver'dxmysql','droplogins' --建立一个新连接 EXEC SP_ADDLINKEDSERVER @server ='dxmysql', --连接名称(随意,规范就可)

@srvproduct ='MYSQL', --连接MYSQL,数据库类型,固定的 @provider ='MSDASQL', --连接MYSQL的编码,固定的 @datasrc ='my_sql' --建立的ODBC连接(第二步建立的) --建立用户连接 EXEC sp_addlinkedsrvlogin'dxmysql','false','bi_etl','root','yxtech' --'dxmysql'为连接名称 --'bi_etl'为SQLSERVER用户,如果为NULL --'root','yxtech' 为登录MYSQL 的用户及密码 --进行查询 select*FROM OPENQUERY(dxmysql,'select * from test1')

如何解决MYSQL数据库中文乱码问题-

如何解决MYSQL数据库中文乱码问题? 问题:如何解决MYSQL数据库中文乱码问题? 回答: 在数据库安的时候指定字符集 如果在安完了以后可以更改以下文件: C: Program Files MySQL MySQL Server 5.0 my.ini 里的所有的default-character-set=gbk C: Program Files MySQL MySQL Server 5.0 data depot_development db.opt default-character-set=gbk default-collation=gbk_chinese_ci 建立数据库时候:指定字符集类型 CREATE DATABASE haichen CHARACTER SET gbk COLLATE gbk_chinese_ci 2.建表的时候也指定字符集 CREATE TABLE student ( ID varchar(40) NOT NULL default , UserID varchar(40) NOT NULL default , ) ENGINE=InnoDB DEFAULT CHARSET=gbk; -

1。创建数据库的时候:CREATE DATABASE `database` CHARACTER SET utf8 COLLATE utf8_general_ci 2.建表的时候CREATE TABLE `database_user` ( `ID` varchar(40) NOT NULL default , `UserID` varchar(40) NOT NULL default , ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.设置URL的时候jdbc:mysql://localhost:3306/database useUnicode=true characterEncoding=UTF-8

SSH下mysql中文乱码问题

SSH下mysql中文乱码问题 标签:mysql中文乱码分类:mysql2010-08-25 11:05 1.在hibernate.cfg.xml配置文件中修改如下 环境:Hibernate 3.2 + MySQL5.0(MySQL的编码已设置为utf8) 问题:通过Hibernate向MySQL写入中文后,通过Hibernate取回数据,在console中打印java对象显示正常。但在MySQL Query Browser中看到的是乱码,传给前端的Flex也是乱码。原因:Hibernate的基础还是JDBC,所以一样需要设置characterEncoding! 解决方法: 在hibernate.cfg.xml中应该这样写 jdbc:mysql://localhost:3306/test?useUnic ode=true&characterEncoding=UTF-8 如果用hibernate.properties #hibernate.connection.url jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 ps:处理中文的话,characterEncoding用GBK一样可以。 但字节编码问题最好的解决方法还是统一使用UTF-8 ----- 我的项目是: jdbc:mysql://localhost:3306/myeshop?useUnicode=tru e&characterEncoding=UTF-8 2.同样在spring里的applicationContext.xml里的数据库连接也要修改: 3.在Web.xml中配置encodingFilter过滤器,在web.xml中加入下面代码 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter

Navicat MySql中文乱码问题

navicat 数据库中文乱码问题 1.右键连接属性-->高级-->Encoding-->936(Simplified Chinese GBK) 去掉User MySql character set 选项 2.数据库安装目录 my.init 更改default-character-set=utf8 3.打开mysql client,进入后再输入show variables like "%char%";可查看更改字符集后的列表. | 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 | C:\Program Files\MySQL\MySQL Server 5.1\share\chars 更改 set names utf8; 更改其中某一个 set @@character_set_database=utf8 set @@character_set_server=utf8 set @@character_set_results=utf8 set @@character_set_connection=utf8 set @@character_set_client=utf8 4.更改表与表字段字符编码方式 5.重启数据库

史上最全的PHP+MySql中文乱码解决方案

我相信PHPmyadmin里查看是乱码,调用出来的话肯定100%也是乱码。乱码问题其实也就是编码不一致导致的。要解决这个问题需要回顾乱码问题出现以前的操作是否使用的是同一种编码。 总之一句话,要解决PHP中文乱码最好最快的解决办法就是:页面申明的编码与数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就设定连接编码mysql_query(”SET NAMES XXX”); XXX为连接编码。一定可以解决乱码的问题。 在mysql+php程序开发中,总结了产生乱码原因: mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码. 如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码. PHP页面字符集不正确. PHP连接MYSQL数据库语句指定的编码不正确. 一.首先是PHP网页的编码 1. php文件本身的编码与网页的编码应匹配 a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312″),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。 b. 如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8″),静态页面添加,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用 session就会出问题,可用editplus来保存,在editplus

数据库表中记录显示中文乱码解决

三种mysql建表乱码的解决方法 作者:温杰 MySql建表乱码问题,默认mysql建表格式为latin(瑞典语),如何设置为能够表示中文的数据库表使我们需要解决的一个很重要的数据库设计问题。 方法1、 在表中输入中文会乱码,需要在建表的时候如下 CREATE TABLE Q3_City ( city_id INTEGER NOT NULL, name VARCHAR(64)NOT NULL, region_id INTEGER NOT NULL, user_id INTEGER NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci; 最后一段添加表的编码格式,该操作比较繁琐。 方法2、在安装mysql的时候没有指定编码格式 可以在https://www.360docs.net/doc/4114663667.html,f的mysqld字段下加入 default-character-set=utf8 default-storage-engine=MyISAM default-collation=utf8_bin init_connect='SET NAMES utf8' 有人这么做,但是本人的虚拟机Linux系统下的MySql不能通过此方法来实现。 方法3、 在安装mysql的时候指定编码格式(建议大家使用这种方法)如果指定了编码格式第2种方法则无效。 ./configure--prefix=/usr/local/mysql--enable-assembler--with-mysqld-ldflags=-all-static --with-charset=utf8 如上在编译mysql的时候添加编码格式,以后在该库中添加新表默认格式都为UTF8。

彻底解决MySql在UTF8字符集下乱码问题 - mysql

为了顺利的开发一个多语言的国际化J2EE程序,需要修改数据库字符集,我的做法如下: 安装MySq时选择字符集为UTF-8 修改MySql安装目录下的my.ini中配置的默认编码: 该文件中有两处这样的配置:default-character-set=latin1 将这两处改成:default-character-set=utf8 新建数据库需指定字符集: UTF8: CREATE DA TABASE mmtye DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 在命令行查看字符集编码:show variables like '%char%'; 会看到如下信息: 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 | D:\MySQL\share\charsets\ 以上内容在重启MySql后也一直有效,无需每次启动数据库都要指定。 A、为了在命令行下能正确查看中文,命令行下执行: set character_set_results=gbk; B、若需要在windows命令行执行insert、update,则执行: set character_set_client=gbk; A、B 两个命令重启数据库前有效,重启后就失效了。

jsp向mysql表中插入中文数据乱码解决

Jsp 向Mysql表中添加中文文字乱码报错,解决方案 1.首先设置页面charset=gb2312 和 <% request.setCharacterEncoding("gb2312"); %> 保证要所用提交页面格式为gb2312, 如果只操作这一步,在控制台打印提交数据有可以出现乱码情况,必须添加下面配置2.创建Filter类,配置web.xml 创建一个名为txtFilter类,实现Filter接口,用来设置页面代码格式 package com.rongtianxinxijishu.book.util; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class txtFiter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub //主要步骤如下 HttpServletRequest req = (HttpServletRequest) arg0; HttpServletResponse res = (HttpServletResponse) arg1; req.setCharacterEncoding("gb2312"); res.setCharacterEncoding("gb2312"); arg2.doFilter(req, res); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub

Xampp中MySQl中文乱码问题

mysql中文乱码问题 相信用过MYSQL的人都会遇到解决中文时出现的乱码问题,产生乱码的原因有很多,挨个排除原因是很费时间和经历的一件事!比如我这次,就浪费了我一天和两个晚上的时间。 前提是装的xampp组合,解决方法如下: 在xampp中,进入MYSQL命令提示行方法: 运行cmd: cd C:\xampp\mysql\bin mysql.exe -u root --password 分别运行: show variables like "%char%"; show variables like 'collation_%'; 来查看mysql默认编码和链接编码设置,基本都是latin1编码形式,而我要修改成UTF-8编码。步骤如下: C:\xampp\mysql\bin下修改my.ini 添加以下语句 [client] default_character_set=utf8 [mysqld] character-set-server = utf8 collation-server = utf8_general_ci [mysql]

default_character_set=utf8 重启mysql服务,再次运行 show variables like "%char%"; show variables like 'collation_%'; 基本都改为了utf8编码,不过collation_connection = latin1_swedish_ci 确实很顽固,没找到修改的方法,只能以一种临时方案解决了: 运行:SET NAMES 'utf8'; 再次运行:show variables like 'collation_%';查看,不出意外的话,应该都是utf8了。 此外,在PHP链接mysql数据时,每次查询的时候,需要加一条语句:mysql_query("SET NAMES 'utf8'"); 至此,问题解决!

MYSQL使用UTF8中文乱码解决办法

MYSQL使用UTF8中文乱码解决办法 MYSQL乱码的问题主要有几个环节决定,一个是前端网页;二是字符传输;三是连接MYSQL;四是MYSQL的存贮方式。 MYSQL的缺省字符集为latin1;如果不做任何处理,则存贮方式为latin;此时虽然在PHP 程序中设置set names 'utf8',可以正确存取中文;但其实utf8的字符按照latin1来存贮,占用的字节数差不多翻倍。这样的方式,本质上是按照乱码存放,读取的时候再还原,是不太可取的。 我们要做的是实现前端UTF-8,传输UTF-8,接口UTF8,存贮UTF8。 1、前端问题:网页和PHP程序存贮为UTF-8格式;网页中指定编码格式: 2、传输问题:apache的配置 vim /etc/apache2/conf.d/charset AddDefaultCharset UTF-8 3、MYSQL的连接和存贮问题:修改MYSQL配置 vim /etc/mysql/https://www.360docs.net/doc/4114663667.html,f [client] default-character-set = utf8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci skip-character-set-client-handshake [mysql] default-character-set = utf8 重启mysql /etc/init.d/mysql restart 进入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/ | mysql> show variables like 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | |

数据库操作时乱码的问题

数据库操作时乱码的问题.txt如果真诚是一种伤害,请选择谎言;如果谎言是一种伤害,请选择沉默;如果沉默是一种伤害,请选择离开。ASP读取数据库的中文出现乱码问题 也许你遇到过这样的问题,当我们用ASP从数据库中读取中文的时候出现乱码,我今天就遇到这种情况: 解决的办法是: 一、(网摘)首先看你的代码中是否包含了这句代码<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 简体中文 powered by https://www.360docs.net/doc/4114663667.html, 其次看一下这句代码是不是出现在连接数据库代码之前,如果不是放在连接数据库代码的前面也可能会出错,一般建议放在最顶端,这样最保险。 另外我们要加的这句代码也可能是 <%@LANGUAGE="VBSCRIPT" CODEPAGE="650"%> 繁体中文 <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> UTF-8797000024 这取决你使用的编码,如果你使用的编码是utf-8 那么你就用 <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 如果你是使用的gb2312 那么你就应该用 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 二、(水燃总结)如果上面都无误还是存在乱码问题时,那就可能是中文编码在插入数据库或从数据库中读出或在网页显示时系统临时自动进行了转换,那么我们要做的就是让系统默认统一编码。 如果你使用的是gb2312,即: 那么就在代码: <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> (注:该行代码一般是网页最上方的第一行代码) 下加一行代码: <%Session.CodePage=936%> 注:做一次上述处理后,当你再去掉<%Session.CodePage=936%>代码时,你可能会发现乱码问题也不会出现了,就是因为系统默认编码转换已经改变统一了。现在你知道乱码问题为什么会时有时无了吧Q_Q ! 对于utf-8的问题同理。

MYSQL使用UTF8中文乱码终极解决办法

MYSQL使用UTF8中文乱码终极解决办法 作者:刘明灵liumingling@https://www.360docs.net/doc/4114663667.html, 2009.8 MYSQL乱码的问题主要有几个环节决定,一个是前端网页;二是字符传输;三是连接MYSQL;四是MYSQL的存贮方式。 MYSQL的缺省字符集为latin1;如果不做任何处理,则存贮方式为latin;此时虽然在PHP程序中设置set names 'utf8',可以正确存取中文;但其实utf8的字符按照latin1来存贮,占用的字节数差不多翻倍。这样的方式,本质上是按照乱码存放,读取的时候再还原,是不太可取的。 我们要做的是实现前端UTF-8,传输UTF-8,接口UTF8,存贮UTF8。 1、前端问题:网页和PHP程序存贮为UTF-8格式;网页中指定编码格式: 2、传输问题:apache的配置 vim /etc/apache2/conf.d/charset AddDefaultCharset UTF-8 3、MYSQL的连接和存贮问题:修改MYSQL配置 vim /etc/mysql/https://www.360docs.net/doc/4114663667.html,f [client] default-character-set = utf8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci skip-character-set-client-handshake [mysql] default-character-set = utf8

相关主题
相关文档
最新文档