MySQL数据库的汉字乱码问题
斑竹
2009年7月12日 14:27:23
try.php文件, 输入数据, 如下。
< ! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
< html xmlns="http://www.w3.org/1999/xhtml">
< head>
< meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
< title>无标题文档
< /head>
< body>
< form id="form1" name="form1" method="post" action="gbk.php">
< input type="text" name="textfield" />
< input type="submit" name="Submit" value="提交" />
< /form>
< /body>
< /html>
gbk.php文件,写入数据库表并读出数据库表的数据, 如下。
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
< html xmlns="http://www.w3.org/1999/xhtml">
< head>
< meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
< title>查看数据
< /head>
< body>
< ?php
$text = $_POST["textfield"];
echo $text;
$dbhost = 'localhost';
$port = 'default';
$dbusername = '';//输入你的数据库用户名
$dbpasswd = ' '; //输入你的数据库密码
$connection = @mysql_connect("$dbhost:$port","$dbusername","$dbpasswd")
or die ('Couldn\'t connect to server.');
//设置数据库联接等是使用字符集gbk
$serverinfo = mysql_get_server_info($connection);
if ($serverinfo > '4.1') {
mysql_query("SET
character_set_connection=gbk,character_set_results=gbk,character_set_client=binary",$connection);
}
$database_name = '';
$db = @mysql_select_db("$database_name", $connection)
or die('Couldn\'t select database.');
$sql="insert into xx (qq) values ('".$text."')";
echo $sql;
$db = mysql_query($sql)
or die ( 'It Didn\'t Work: ' . mysql_error() );
$sql="select qq from xx";
$result=mysql_query($sql)or die ( 'It Didn\'t Work: ' . mysql_error() );
// Display results to user.
while ( $row =mysql_fetch_object( $result ) )
{
echo $row->qq ;
}
? >
< /body>
< /html>
这是数据库表
2楼 2009年7月12日 14:42:39
斑竹
--
-- 表的结构 xx
--
CREATE TABLE IF NOT EXISTS xx (
qq varchar(6) CHARACTER SET gbk NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
另外,很多MySQL用PHPMyAdmin作图形管理界面,如果是可以选择字符的PHPMyAdmin,这时已经不仅网页上显示中文,PHPMyAddmin的图形界面也可以显示中文了。但国外的
一些服务器上的PHPMyAdmin没有提供字符选择项,所以,你在PHPMyAdmin界面看到的数据库表里的中文字符可能是?号,虽然实际在数据库中保存的已经是gbk的中文字符了。
这个问题通过在查询和插入数据时先运行:
SET character_set_connection=gbk,character_set_results=gbk,character_set_client=binary;就可解决。不过在
collation(排序)时还是会出现字符集gbk和latin冲突的问题,如下:
#1267 - Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and
(latin1_swedish_ci,COERCIBLE) for operation '='
BTW,据说因为MySQL的创始人是瑞典人,所以默认字符是latin1_swedish_ci。