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.