1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

joomla 数据库转换为UTF8编码的问题

本帖由 泪随风逝2007-01-25 发布。版面名称:源码讨论

  1. 泪随风逝

    泪随风逝 New Member

    注册:
    2005-09-17
    帖子:
    2,891
    赞:
    17
    joomla 在mysql5上默认安装后,即使mysql现在的编码是utf8了,joomla默认编码仍然是latin1,也就是在utf8的mysql5数据库里把所有内容存贮为latin1,对应的中文编码存贮方式就是gb2312。这样造成很多困扰,如phpmyadmin看到的joomla数据库内的中文为乱码等。

    下面就以joomla 1.0.10为例,说明转换现有数据的过程。

    1.用mysqldump导出要转换的数据.
    mysqldump -u root -p --opt --default-character-set=latin1 --databases database > C:\joomla.sql

    2.导出的joomla.sql文件用记事本查看,中文是乱码,用ultraedit看,可以看到中文,但如果直接用ultraedit转换为utf8的话,不管用mysql还是phpmyadmin导入时,都会报一些莫名奇妙的语法错误,如果直接用记事本转换同样不行.
    最常用的转换方法应该时用iconv,*nix下都有,windows下可以用cygwin的iconv,网上一般说到mysql4.0转换到4.1或者 5.0时都用iconv (iconv -f gb2312 -t utf-8 joomla.sql > new.sql).但是这里我的数据库用iconv转换失败,只能转换前面一小部分.连iconv都不成功,看来导出的joomla.sql文件内部可能不是gb2312编码的了.

    最后发现用notepad++打开导出的joomla.sql文件,然后把编码换成utf8,中文就显示正常了,这时候把文件保存到另一个文件joomla.new.sql .用记事本打开中文显示正常.
    如果这时候直接用mysql -u root -p database < joomla.new.sql,不成功,提示第一行就错误,比较两个sql文件,只相差3字节,看来根本问题是按latin1导出的文件已经是utf8的了(奇怪的逻辑?mysql5本来就是用utf8来存储数据的),notepad++另存的文件只是在前面加了BOM的三个字节.其他内容没变!现在的问题是带BOM的mysql命令行导入失败,如果mysql命令行导入不带BOM的文件,效果跟原来一样,等于没导入.

    3.用phpmyadmin导入
    mysql命令行不能导入,看来只能用phpmyadmin了,打开phpmyadmin里的相应数据库,从notepad++内拷贝正常的sql语句,执行...居然也报语法错误?
    最后再用记事本打开joomla.new.sql,再ctrl+A,拷贝到phpmyadmin执行,这次行了!!!
    是在想不明白用notepad++和记事本拷贝有什么区别?
    但就是只能这样才能通过,很奇怪的过程.所以记下来,如果别人碰到类似问题,看了以上的文字希望可以节省点时间.

    4.再把joomla/includes/database.php内102行的那条语句前的"//"去掉,让joomla的数据库连接的编码直接用utf8,打开网站就正常了.

    如果是新安装joomla的话
    1.首先修改installation/sql/sql_simplified_chinese/joomla.sql内每个表的定义后面的分号前都加上一条DEFAULT CHARACTER SET utf8.

    2.七百多行的表core_acl_aro的定义里把两个240换成160 (utf8每个字符占三个字节,而mysql默认的索引最长1000个字节,240*2*3>1000所以改为小于1000,运行一个月好像没什么影响).

    3.把joomla/includes/database.php内102行的那条语句前的"//"去掉.

    4.在phpmyadmin内把mysql的连接校对设置为utf8-unicode-ci,在mysql内新建一个数据库,默认的连接校对如上.

    5.安装新joomla.
     
  2. toll

    toll New Member

    注册:
    2005-09-06
    帖子:
    304
    赞:
    4
    建议安装mysql之后,修改默认的编码格式

    以下是我的mysql5.X的配置文件

     
  3. 泪随风逝

    泪随风逝 New Member

    注册:
    2005-09-17
    帖子:
    2,891
    赞:
    17
    国内很多人用的都是虚拟主机,可能没有这个权限修改mysql的默认编码