php,mysql下中文编码解决方案
文档:
sample enviroment:
it's not simle to yours but I think it will work.
windows server 2003 Simple Chinese edition
apache 2.2.11
php-5.2.8-Win32
MySQL-5.1.31
=============
0.编码选择:UTF-8 还是 GB2312还是GBK。
UTF-8可以兼容ASCII编码,会根据需要占用1个或者2个字节,比较小。(其他如UTF-16和UTF-32是固定死占用2个字节或者4个字节的)
GB2312只能包括6000多常用字
GBK可以包含简体、繁体,范围广
1. PHP中的设置
php中要对php.ini文件中设置开启extension=php_mbstring.dll,按照需要修改mb_string的相关编码配置
2.MySql中的设置:
因为mySql字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。因此可以后面再设置
3.Apache中的设置:
如果是UTF-8就不用设置,如果是GBK需要设置一下httpd.conf ,开启AddDefaultCharset
4.具体操作:
第一步:建立数据库
默认是latine的encoding和collection的。因为只有一个字段是中文的,所以不用修改数据库的默认配置文件。
只要建立数据库的时候,对这个字段设置为gbk_chinese_ci即可
第二步:设置网页的charset和encoding。如果是没有设置,将根据客户端的Request来
第三步,建立连接的时候需要
SET character_set_client='gbk'
SET character_set_connection='gbk'
SET character_set_results='gbk'
(这个配置就等价于 SET NAMES 'gbk'。
)
================================================
0.choose an encoding
you have 3 choises:utf-8,gb2312 and GBK.
UTF-8 contains ASKII, and it uses 1 or 2 bytes so it's smaller to transform in web.
but it's contains less Chinese Characters.(Others like UTF-16 and UTF-32,is fixed to user 2 or 4 bytes)
GB2312 contains only 6000 more popular characters, such as '***' can't be contained.
GBK contains simple Chinese and Tranditional Chinese ,I think it's pro. my sample is for GBK.
1. config PHP
modify php.ini , and set the line
extension=php_mbstring.dll
on
.maybe you need to configurate the mb_string.
2.mySql configration
as mySql supports defferent charset in 4 layers, the server, the database,the table and connection.
and you have only one table ,one field in Chinese, you need not to modify the whole mysql configration
3.Apache configuration
If you are willing to use UTF-8 , you need not to configurate anything for it support utf-8 by default.
if you want to use GBK you need to modify httpd.conf and open the AddDefaultCharset
4.sample steps:
firstly, create a database
and the database's collection is latine.
when you create the table, the field, set the field's collection to gbk_chinese_ci
secondly, set the special pages you want to show the Chinese Characters.
set the charset and encoding
third, when you build a connection ,either in commandline or php , you need to run the 3 lines script:
SET character_set_client='gbk'
SET character_set_connection='gbk'
SET character_set_results='gbk'
these three lines are equle to
SET NAMES 'gbk'
例子:
php文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>测试中文入数据库</title>
</head>
<body>
<ul>
<?php
$conn = mysql_connect("localhost","root","sa");
mysql_query("set names 'gbk'");//关键是这句
mysql_select_db("test");
$sql = "select * from chinesetest ";
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_assoc($result))
{
echo "<li>".$row['id']."-".$row["CF"]."</li>";
}
$sql2 = "Insert Into chinesetest (CF) values('中文插入测试');";
mysql_query($sql2);
$sql2 = "Insert Into chinesetest (CF) values('請看,這裡是繁體中文')";
//echo $sql2;
mysql_query($sql2);
echo mysql_error();
mysql_close();
?>
</ul>
</body>
</html>
整体解决方案:
/Files/xxpyeippx/chinese_on_mysql.zip
建表语句:
CREATE TABLE IF NOT EXISTS `chinesetest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`CF` varchar(255) CHARACTER SET gbk NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
转载请注明出处