IPS 中文支持论坛 - IPS Chinese Support Community: [IPB31]修正数据库编码为UTF-8 - IPS 中文支持论坛 - IPS Chinese Support Community

跳转到内容

第一页
  • 您无法发起一个新主题
  • 您无法回复此主题

[IPB31]修正数据库编码为UTF-8

#1 已离线   skylook 

  • Advanced Member
  • 点子点子点子点子
  • 用户组: Site Administrator
  • 文章数: 463
  • 注册日期: 2008-01-31

发表于 2010-06-16 14:36:32

IPB 3.1 虽然支持 UTF-8 编码,但是在创建和升级数据库的时候却并没有默认将数据表编码设置为 utf8 而是采用了 lain1 (尚未确认是否与数据库设置有关)。如果你安装或者升级后出现乱码(尤其是后台设置中论坛标题等中文字符出现乱码,而前台帖子等并没有出现乱码),则很可能是数据库编码设置出现了问题,这时需要强制将所有数据库编码转换为 UTF-8 来解决。

方法如下:

1、在论坛根目录下新建 convert.php 文件,内容为:
<?php
// Database info

include("conf_global.php");

$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];

//---------------

header('Content-type: text/plain');

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );

$sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result = mysql_query($sql) or die( mysql_error() );
print "Database changed to UTF-8.\n";

$sql = 'SHOW TABLES';
$result = mysql_query($sql) or die( mysql_error() );

while ( $row = mysql_fetch_row($result) )
{
$table = mysql_real_escape_string($row[0]);
$sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($sql) or die( mysql_error() );
print "$table changed to UTF-8.\n";
}

mysql_close($dbconn);
?>


保存文件。

2、在浏览器中运行 http://你的论坛地址/convert.php ,直到脚本运行完毕,全部数据库编码设置为 UTF-8。
请务必注意:该脚本会将所有和论坛数据表位于同一数据库的编码都强制转化为 utf8 ,如果你有数据表不希望转化,千万不要直接运行这个脚本!

3、修改论坛根目录下 conf_global.php 文件,将:
$INFO['sql_charset']			=	'';

修改为:
$INFO['sql_charset']			=	'utf8';

注意:如果没有此设置项,请手工添加。

4、对于已经出现乱码的设置,这种方法并不能将设置正确转换,建议在后台重新设置(好在可能用到中文的设置项不多)。
注意:如果没有进行上面的步骤,那么即使后台设置保存为正确的中文,也仍然会变成乱码。

附加文件


1

分享主题:


第一页
  • 您无法发起一个新主题
  • 您无法回复此主题