mysql消除乱码方法集
我用php+mysql做系统的时候发现数据库的汉字在数据库里是显示正常的,但是一旦数据库与php连接,汉字就会显示为???多个问号,一直都在想办法解决它,但是试了好包括修改php 还有mysql配置文件的默认字体,还有在建html时的字体的设置,但是都不行,今天突然在网上看到有说用 这中方法可以的。1.在使用MySQL和php的时候出现过中文乱码问题
(1) 只要是gb2312,gbk,utf8等支持多字节编码的字符集都可以储存汉字,当然,gb2312中的汉字数量远少于gbk,而gb2312,gbk等都可在utf8下编码
(2)用命令show variables like 'character\_set\_%';查看当前字符集设定:
以下为引用的内容:
mysql> show variables like 'character\_set\_%';
mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.02 sec)
(笔者在这里设置的字符是gb2312)
显示中文乱码主要有两个设置:character_set_connection 和character_set_results ,
如果你的这两个设置不支持中文编码,就会出现乱码,只要:set character_set_results =gbk;就设置中文编码了.
(3).set names charset_name;还可以一次性设置客户端的所有字符集.
这种方法我也试了也不可以的。
又随便在网上转了转有哥们说√ 乱码问题1. 用PHPmyAdmin操作MySQL数据库汉字显示正常 ,但用PHP网页显示MySQL数据时所有汉字都变成了?号。
症状:用PHPmyAdmin输入汉字正常,但当PHP网页显示MySQL数据时汉字就变成了?号,并且有多少个汉字就有多少个?号。很多学员都遇到了此问题,尤其是在安装了最新版的Appserv后。为此许多学员放弃了PHP,改学ASP了。
原因:没有在PHP网页中用代码告诉MySQL该以什么字符集输出汉字。
★ 解决方法:这不是乱码,只要在PHP网页头部加入以下一段代码告诉MySQL以UTF8编码输出汉字即可
mysql_query("SET NAMES UTF8");? ?>
??????? 你也可以在网页中PHP代码部分直接插入上述代码片段(即去掉两端?>号)。例如你用Dreamweaver连接数据库,那么可以在头部的连接代码
中加入该代码使其变成
php require_once(''Connections/connmessage.php'');
mysql_query("SET NAMES UTF8");?
?? ?>
注意:如果你的网页编码是gb2312,那就是 SET NAMES GB2312。当初就不知道
mysql_query("SET NAMES UTF8");加到什么地方,自己就想着加到文件投就可以了,结果还是不行。看下面的程序后我大有启发:结果成功了解决了困惑我已久的问题
症状:用PHPmyAdmin输入汉字正常,但当PHP网页显示MySQL数据时汉字就变成了?号,并且有多少个汉字就有多少个?号。很多学员都遇到了此问题,尤其是在安装了最新版的Appserv后。为此许多学员放弃了PHP,改学ASP了。
原因:没有在PHP网页中用代码告诉MySQL该以什么字符集输出汉字。
★ 解决方法:这不是乱码,只要在PHP网页头部加入以下一段代码告诉MySQL以UTF8编码输出汉字即可
mysql_query("SET NAMES UTF8");? ?>
??????? 你也可以在网页中PHP代码部分直接插入上述代码片段(即去掉两端?>号)。例如你用Dreamweaver连接数据库,那么可以在头部的连接代码
中加入该代码使其变成
php require_once(''Connections/connmessage.php'');
mysql_query("SET NAMES UTF8");?
?? ?>
注意:如果你的网页编码是gb2312,那就是 SET NAMES GB2312。当初就不知道
mysql_query("SET NAMES UTF8");加到什么地方,自己就想着加到文件投就可以了,结果还是不行。看下面的程序后我大有启发:结果成功了解决了困惑我已久的问题
选择php就是因为这种自由软件精神,互相公开自己的代码,互相改进,互相学习,这种精神就像像奥林匹克精神一样,让人向往,深深地吸引着我,这是一个邮政编码条数查询的例子,用的是php+mysql,相信对php初学者很有帮助,解决了:网页显示、数据库连接的乱码问题。
举个例子,邮政编码条数查询,such as:
9-4.php
------------------------------------------------------------------------------------------------
content="text/html; charset=utf-8" />
邮政编码条数查询
-------------------------------------------------------------------------------------------------------------------------
9-5.php
header("Content-Type:text/html;charset=utf-8");
$link = mysql_connect("localhost","root","123456");
mysql_query("SET NAMES 'utf8'");
mysql_query("use db");
$sqlstr="select * from zip where zone ='".$_POST['zone']."'";
$result = mysql_query($sqlstr,$link);
echo $_POST['zone']." 共有 ".mysql_num_rows ($result). "笔邮政编码数据";
mysql_free_result($result);
mysql_close($link);
?>
注:数据库设计是网站设计的核心,关于本段程序的数据库如下:
create_zip.txt
-----------------------------------
drop table if exists zip;
create table zip(
id smallint unsigned not null auto_increment primary key,
zip int unsigned,
zone char(10),
area char(10)
);
create table zip(
id smallint unsigned not null auto_increment primary key,
zip int unsigned,
zone char(10),
area char(10)
);
insert_zip.sql
-----------------------------------------
delete from ZIP;
insert into ZIP values (NULL, 100,'台北县','中正区');
insert into ZIP values (NULL, 103,'台北县','大同区');
insert into ZIP values (NULL, 104,'台北县','中山区');
insert into ZIP values (NULL, 105,'台北县','松山区');
insert into ZIP values (NULL, 106,'台北县','大安区');
insert into ZIP values (NULL, 108,'台北县','万华区');
insert into ZIP values (NULL, 110,'台北县','信义区');
insert into ZIP values (NULL, 111,'台北县','士林区');
insert into ZIP values (NULL, 112,'台北县','北投区');
insert into ZIP values (NULL, 114,'台北县','内湖区');
insert into ZIP values (NULL, 115,'台北县','南港区');
insert into ZIP values (NULL, 116,'台北县','文山区');
insert into ZIP values (NULL, 200,'基隆县','仁爱区');
insert into ZIP values (NULL, 201,'基隆县','信义区');
insert into ZIP values (NULL, 202,'基隆县','中正区');
insert into ZIP values (NULL, 203,'基隆县','中山区');
insert into ZIP values (NULL, 204,'基隆县','安乐区');
insert into ZIP values (NULL, 205,'基隆县','暖暖区');
insert into ZIP values (NULL, 206,'基隆县','七堵区');
insert into ZIP values (NULL, 100,'台北县','中正区');
insert into ZIP values (NULL, 103,'台北县','大同区');
insert into ZIP values (NULL, 104,'台北县','中山区');
insert into ZIP values (NULL, 105,'台北县','松山区');
insert into ZIP values (NULL, 106,'台北县','大安区');
insert into ZIP values (NULL, 108,'台北县','万华区');
insert into ZIP values (NULL, 110,'台北县','信义区');
insert into ZIP values (NULL, 111,'台北县','士林区');
insert into ZIP values (NULL, 112,'台北县','北投区');
insert into ZIP values (NULL, 114,'台北县','内湖区');
insert into ZIP values (NULL, 115,'台北县','南港区');
insert into ZIP values (NULL, 116,'台北县','文山区');
insert into ZIP values (NULL, 200,'基隆县','仁爱区');
insert into ZIP values (NULL, 201,'基隆县','信义区');
insert into ZIP values (NULL, 202,'基隆县','中正区');
insert into ZIP values (NULL, 203,'基隆县','中山区');
insert into ZIP values (NULL, 204,'基隆县','安乐区');
insert into ZIP values (NULL, 205,'基隆县','暖暖区');
insert into ZIP values (NULL, 206,'基隆县','七堵区');
这个方法对于数据库中本来就存在的汉字信息应该是可以的,但是我在编程的过程中发现如果数据库中本来不存在的信息要通过页面写进去更新数据库的话可能还会出现乱码以问号的形式出现这时可以以下面的例子为参考: @mysql_connect("localhost" ,"root" )
or die ("数据库服务器连接失败");
@mysql_query("set names 'gbk'");//然后指定数据库字符集
or die ("数据库服务器连接失败");
@mysql_query("set names 'gbk'");//然后指定数据库字符集
@mysql_select_db("mydb")
or die ("数据库不存在或打不开");
$serial_no=$_GET['serial_no'];
$name = $_GET['name'];
$age = $_GET['age'];
$birthday =$_GET['birthday'];
$salary =$_GET['salary'];
$bonus=0;
$query=mysql_query( "insert into mytable values ($serial_no,'$name',$age,'$birthday',$salary,$bonus)");
if($query)
{
echo "数据插入成功";
}
else
echo "数据插入不成功";
mysql_close();
?>
or die ("数据库不存在或打不开");
$serial_no=$_GET['serial_no'];
$name = $_GET['name'];
$age = $_GET['age'];
$birthday =$_GET['birthday'];
$salary =$_GET['salary'];
$bonus=0;
$query=mysql_query( "insert into mytable values ($serial_no,'$name',$age,'$birthday',$salary,$bonus)");
if($query)
{
echo "数据插入成功";
}
else
echo "数据插入不成功";
mysql_close();
?>