上一篇:多伦多清洁工人罢工进入第20天
下一篇:2009-07-13 | 【盛夏爆雪】川震受难学生家长代表被判刑 (ZT)
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。
第1页 共1页
相关链接
1. Drupal 7.23: PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away:
2. MySQL插入新记录后获取插入数据的id值
3. 从Excel导入数据到MySQL出现中文乱码(已解决)
4. 将Excel数据保存到MySQL数据库及PHP读Excel数据(附代码)
5. 如何修改MySQL表和列的COMMENT
6. 用MySQL的触发、存储程序、函数改善网页速度(附运行于phpMyAdmin的例子代码)
7. 如何备份、恢复MySQL数据库
8. MySQL的数据库备份问题