Mysql以utf8存储gbk输出的实现方法提供

孽小小草

孽小小草

2016-02-19 11:12

今天图老师小编给大家介绍下Mysql以utf8存储gbk输出的实现方法提供,平时喜欢Mysql以utf8存储gbk输出的实现方法提供的朋友赶紧收藏起来吧!记得点赞哦~
一个站有可能经历gb2312(gbk,big5)到utf8的转换过程,其中会遇到很多的问题。站点太庞大了怎么办呢,只能一步步来了。要是能在极少改动前端代码的情况下,先完成数据的转换将会使整件事情容易得多。经过几天测试终于发现,Mysql以utf8存储gbk输出是可以实现的。mysql4.1后都有个特性,可以指定当前客户端连接所使用的字符集,mysql默认都是latin1,或由mysql server端配置的字符集进行连接校对。我使用utf8_general_ci来创建字段。 
DB:
SQL代码:
代码如下:

Create TABLE `table` (  
`id` INT( 10 ) NOT NULL ,  
`name` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,  
INDEX ( `g_id` )   
) ENGINE = innodb CHARACTER SET utf8 COLLATE utf8_general_ci;  


PHP:
存储操作指定使用utf8字符集进行连接校对,读取操作指定使用gbk字符集进行连接校对。


PHP代码:
代码如下:

?php  
        //    Select    DB    And    Set    Link    Use    UTF8  
        function    _select_db_utf()  
        {  
        mysql_select_db($this-db_name,    $this-db_link);  


        //    init    character  
        mysql_query("SET    NAMES    utf8",    $this-db_link);  
        mysql_query("SET    CHARACTER    SET    utf8",    $this-db_link);  
        mysql_query("SET    COLLATION_CONNECTION='utf8_general_ci'",    $this-db_link);  


        return    true;  
        }  


        //    Select    DB    And    Set    Link    Use    GBK  
        function    _select_db_gb()  
        {  
        mysql_select_db($this-db_name,    $this-db_link);  


        //    init    character  
        mysql_query("SET    NAMES    gbk",    $this-db_link);  
        mysql_query("SET    CHARACTER    SET    gbk",    $this-db_link);  
        mysql_query("SET    COLLATION_CONNECTION='gbk_chinese_ci'",    $this-db_link);  


        return    true;  
        }  
?  
需要注意几点:
1. mysql必须把gbk,gb2312,utf8等字符集编译进去。
2. 入库的数据内容必须保证是最正确的UTF8编码。
3. 存储和读取操作要指定正确的字符集进行连接校对。

要是前端代码操作数据入库不能以UTF8进行,则需要对字符进行转码了。(例如用AJAX提交的数据便是正确的UTF8,这时是不用转换的。)

因为mb_string是PHP所支持字符最全的,而iconv比它稍差一点,mb_string并不能完全支持一些特殊字符的转码,所以目前为止都没有完美的转码方法。

再次对mb_string和iconv进行比较:

mb_string:
1. 所支持字符最全
2. 内容自动识别编码,不需要确定原来字符的编码,但是执行效率比iconv差太多
3. $content = mb_convert_encoding($content, "UTF-8", "GBK,GB2312,BIG5");(顺序不同效果也有差异)

iconv:
1. 所支持字符不全
2. 需要确定原来字符的编码,但在确定编码的情况下执行效率比mb_convert_encoding高
3. $content = iconv("GBK", "UTF-8", $content);
展开更多 50%)
分享

猜你喜欢

Mysql以utf8存储gbk输出的实现方法提供

编程语言 网络编程
Mysql以utf8存储gbk输出的实现方法提供

JDom输出UTF-8的XML完美解决

Web开发
JDom输出UTF-8的XML完美解决

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

tomcat+mysql使用utf-8

Web开发
tomcat+mysql使用utf-8

xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312 编码 解码)

Web开发
xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312 编码 解码)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL 有输入输出参数的存储过程实例

编程语言 网络编程
MySQL 有输入输出参数的存储过程实例

Java中将数据由UTF8转换成GB2312格式

编程语言 网络编程
Java中将数据由UTF8转换成GB2312格式

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Windows 8.1安全改进一览

Windows 8.1安全改进一览

div css与xhtml css是什么意思?

div css与xhtml css是什么意思?
下拉加载更多内容 ↓