数据库编码GBK,页面是UTF8

时间:2021-12-17 07:30:16
数据库编码GBK,页面是UTF8

页面乱码,有解决的方案吗?

谢谢

15 个解决方案

#1


页面修改编码如果含有汉字就太麻烦,直接修改数据库,将数据库导出.sql文件,然后打开查找并修改
CHARACTER SET utf8
然后再导入

#2


把编码统一!要用GBK,数据库,程序,页面都用gbk,用utf-8,那就都用utf-8!

#3


mysql_query("set names gbk");

#4


数据库编码和页面编码要一致,

#5


1.首先用下面的函數改變數據庫編碼為'utf8_unicode_ci'
2.改變好了的話在加上mysql_query("set names utf8");
function change_code($db='',$code = 'utf8_unicode_ci')
{
    $arr = explode('_',$code);
    $s = $arr[0];
    mysql_select_db($db);
    $sql = "ALTER DATABASE `$db` DEFAULT CHARACTER SET $s COLLATE $code";
    mysql_query($sql);
    $sql = "SHOW TABLE STATUS FROM $db ";
    $result = mysql_query($sql);
    while($row = mysql_fetch_array($result))
    {
        if($row['Collation'] != $code){
            $sql = "ALTER TABLE `{$row['Name']}`  DEFAULT CHARACTER SET $s COLLATE $code";
            mysql_query($sql);
        }
        $sql = "SHOW FULL COLUMNS FROM `{$row['Name']}`";
        $result2 = mysql_query($sql);
        while($row2 = mysql_fetch_array($result2))
        {
            $null = $row2['Null'] == 'YES'?'NULL':'NOT NULL';
            if(is_null($row2['Default']) && $row2['Null'] == 'YES'){
                $default = 'NULL';
            }elseif(is_null($row2['Default']) && $row2['Null'] == 'NO'){
                $default = "''";
            }else{
                $default = "'{$row2['Default']}'";
            }
            if($row2['Collation'] != $code && !is_null($row2['Collation'])){
                $sql = "ALTER TABLE `{$row['Name']}`  CHANGE  `{$row2['Field']}` `{$row2['Field']}` {$row2['Type']} CHARACTER SET $s COLLATE $code $null DEFAULT $default";
                mysql_query($sql);
            }
        }
    }
}

#6


mysqlfont可以直接改数据库

#7


哦,是这样的

之前网站一直用GBK, 现在其它软件想调用网站数据,需要PHP提供json格式数据,这个PHP文件需要UTF8编码

在不改变数据库编码的情况下,怎么实现呢?

谢谢楼上各位热心帮助

#8


本办法:
就爱那个你的页面代码复制到记事本;
新建utf8文件,将记事本内容移至该文件;
修改汉字。
……
Dreamweaver可以重新加载不同编码的文件

#9


选择数据库后执行一下
mysql_query('set names utf8');

#10


该回复于2012-05-16 17:40:16被版主删除

#11


引用 7 楼  的回复:
哦,是这样的

之前网站一直用GBK, 现在其它软件想调用网站数据,需要PHP提供json格式数据,这个PHP文件需要UTF8编码

在不改变数据库编码的情况下,怎么实现呢?

谢谢楼上各位热心帮助

如果不改變數據庫編碼的話就比較麻煩了。
你要在每個文件上面加上
<?php 
  header("Content-Type:text/html;charset=gbk"); 
  如果還有亂碼的話,數據庫連接時在加上
  mysql_query('set names gbk');
?>

#12


引用 9 楼  的回复:
选择数据库后执行一下
mysql_query('set names utf8');
mysql 改字符集这么容易么?

#13


引用 12 楼  的回复:
引用 9 楼  的回复:

选择数据库后执行一下
mysql_query('set names utf8');
mysql 改字符集这么容易么?
要改mysql字符集干什么? set names 只是改了会话语言
就如同你和英国人交流是用英语,和日本人交流用日语,或者让他们用国语,是一个道理

#14


涉及到mysql设置的客户端编码以及server端返回的编码以及数据库自身编码,只有这样mysql才能在内部正确的转来转去。

set names utf8只是设置客户端query的编码,如果query里没有非ASCII字符是没用的。这个问题本身就不单纯,楼主还是先统一数据库的server,client,database三个编码之后再说吧。

#15


数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。

知道了WEB开发中哪些地方涉及到了编码,也就知道了PHP页面乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。下面是一些常见的错误情况与解决:

1、数据库采用GB2312编码,而页面申明编码是UTF8,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是PHP页面乱码,需要在查询前先使用:

mysql_query("SET NAMES UTF8"); 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:
mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。

详细原文:http://www.phpnewer.com/index.php/Cjwt/detail/id/367

#1


页面修改编码如果含有汉字就太麻烦,直接修改数据库,将数据库导出.sql文件,然后打开查找并修改
CHARACTER SET utf8
然后再导入

#2


把编码统一!要用GBK,数据库,程序,页面都用gbk,用utf-8,那就都用utf-8!

#3


mysql_query("set names gbk");

#4


数据库编码和页面编码要一致,

#5


1.首先用下面的函數改變數據庫編碼為'utf8_unicode_ci'
2.改變好了的話在加上mysql_query("set names utf8");
function change_code($db='',$code = 'utf8_unicode_ci')
{
    $arr = explode('_',$code);
    $s = $arr[0];
    mysql_select_db($db);
    $sql = "ALTER DATABASE `$db` DEFAULT CHARACTER SET $s COLLATE $code";
    mysql_query($sql);
    $sql = "SHOW TABLE STATUS FROM $db ";
    $result = mysql_query($sql);
    while($row = mysql_fetch_array($result))
    {
        if($row['Collation'] != $code){
            $sql = "ALTER TABLE `{$row['Name']}`  DEFAULT CHARACTER SET $s COLLATE $code";
            mysql_query($sql);
        }
        $sql = "SHOW FULL COLUMNS FROM `{$row['Name']}`";
        $result2 = mysql_query($sql);
        while($row2 = mysql_fetch_array($result2))
        {
            $null = $row2['Null'] == 'YES'?'NULL':'NOT NULL';
            if(is_null($row2['Default']) && $row2['Null'] == 'YES'){
                $default = 'NULL';
            }elseif(is_null($row2['Default']) && $row2['Null'] == 'NO'){
                $default = "''";
            }else{
                $default = "'{$row2['Default']}'";
            }
            if($row2['Collation'] != $code && !is_null($row2['Collation'])){
                $sql = "ALTER TABLE `{$row['Name']}`  CHANGE  `{$row2['Field']}` `{$row2['Field']}` {$row2['Type']} CHARACTER SET $s COLLATE $code $null DEFAULT $default";
                mysql_query($sql);
            }
        }
    }
}

#6


mysqlfont可以直接改数据库

#7


哦,是这样的

之前网站一直用GBK, 现在其它软件想调用网站数据,需要PHP提供json格式数据,这个PHP文件需要UTF8编码

在不改变数据库编码的情况下,怎么实现呢?

谢谢楼上各位热心帮助

#8


本办法:
就爱那个你的页面代码复制到记事本;
新建utf8文件,将记事本内容移至该文件;
修改汉字。
……
Dreamweaver可以重新加载不同编码的文件

#9


选择数据库后执行一下
mysql_query('set names utf8');

#10


该回复于2012-05-16 17:40:16被版主删除

#11


引用 7 楼  的回复:
哦,是这样的

之前网站一直用GBK, 现在其它软件想调用网站数据,需要PHP提供json格式数据,这个PHP文件需要UTF8编码

在不改变数据库编码的情况下,怎么实现呢?

谢谢楼上各位热心帮助

如果不改變數據庫編碼的話就比較麻煩了。
你要在每個文件上面加上
<?php 
  header("Content-Type:text/html;charset=gbk"); 
  如果還有亂碼的話,數據庫連接時在加上
  mysql_query('set names gbk');
?>

#12


引用 9 楼  的回复:
选择数据库后执行一下
mysql_query('set names utf8');
mysql 改字符集这么容易么?

#13


引用 12 楼  的回复:
引用 9 楼  的回复:

选择数据库后执行一下
mysql_query('set names utf8');
mysql 改字符集这么容易么?
要改mysql字符集干什么? set names 只是改了会话语言
就如同你和英国人交流是用英语,和日本人交流用日语,或者让他们用国语,是一个道理

#14


涉及到mysql设置的客户端编码以及server端返回的编码以及数据库自身编码,只有这样mysql才能在内部正确的转来转去。

set names utf8只是设置客户端query的编码,如果query里没有非ASCII字符是没用的。这个问题本身就不单纯,楼主还是先统一数据库的server,client,database三个编码之后再说吧。

#15


数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。

知道了WEB开发中哪些地方涉及到了编码,也就知道了PHP页面乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。下面是一些常见的错误情况与解决:

1、数据库采用GB2312编码,而页面申明编码是UTF8,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是PHP页面乱码,需要在查询前先使用:

mysql_query("SET NAMES UTF8"); 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:
mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。

详细原文:http://www.phpnewer.com/index.php/Cjwt/detail/id/367