PHP关于GBK格式写入utf8_general_ci 编码mysql数据库乱码的解决办法

最近在抓取一个GB2312/GBK编码的页面,得到中文数据之后写入Mysql。表的编码是utf8_general_ci,突然之间居然不能写入Mysql了。将运行页面改为GBK,能写入,但是是乱码。

首先想到的解决办法是,将GB2312/GBK转换为UTF8编码,然后将数据库写入环节设置为UTF8:

$post_title=iconv("GBK", "UTF-8", $post_title);
$post_title=mb_convert_encoding($post_title, "UTF-8");
if (!mysql_query("set names utf8",$con) || !mysql_query("SET CHARACTER_SET_CLIENT=utf8",$con) || !mysql_query("SET CHARACTER_SET_RESULTS=utf8",$con))
		die('Could not set names utf8: ' . mysql_error());

但是非常遗憾,上述步骤的各种组合完全无法解决问题。

最后尝试了一种办法解决了问题:

if (!mysql_query("set names GBK",$con) || !mysql_query("SET CHARACTER_SET_CLIENT=GBK",$con) || !mysql_query("SET CHARACTER_SET_RESULTS=GBK",$con))
		die('Could not set names GBK: ' . mysql_error());

即将要写入的语句转换为UTF8的办法行不通,因此,保持要写入语句的格式为GBK,将Mysql写入过程设置为GBK就好了。

你可能感兴趣的:(PHP&mysql&db)