12月份原来在炎黄的服务器空间就要过期了, 想了想是不是继续续费的问题, 最终决定还是搬到同济网服务器吧. 毕竟是一个经常关心的服务器, 几乎每天都来维护, 放在自己手里毕竟还是放心一点. 无奈同济网服务器上的MySQL字符集还是老的3.25版本的latin1字符集, MySQL的版本也过低, wordpress装不上. 更新字符集的问题老早就提出来了, 只是这个过程实在太复杂, 一直没实施. 其实这其中的每个细节我都仔细想过, 只是没有操作出来而已. 不过即便如此, 今天在真正操作的时候心里也是没底的.

起了个大早, 6点半就开始在Linux主机上工作, 一直做到下午, 一共转了近1000万行SQL数据, 把字符集成功转换成了gbk. 功在当代利在千秋的事情. 从此我们的服务器用上了最新版本的MySQL, Apache和PHP.

如何做的呢? 说下大概过程吧. MySQL的文档里讲推荐逐步升级, 3.x要先升级到4.0, 然后4.1, 然后5.0. 我觉得没必要, 另外4.0这样的老版本根本找不到下载了, 这个文档写的太XX了. 首先在MySQL 3.x里用mysqldump把数据导成SQL文件, 按照数据库导出, 大型数据库要注意对导出后的文件进行分割, 用如下命令:

split -l 100000 filename

进行按行分割, 我们的BBS分成了8个100万行的文件. 这样操作的原因是一旦出错, 修改的时候打开起来方便, 不至于每次打开一个3GB的大文件. 然后升级MySQL到5.0, 建数据库, 整理选成gbk_chinese_ci, 然后在每个将要导入的文件开头加上:

set names 'gbk';

然后用如下命令导入:

mysql -uroot -ppassword --default-character-set=gbk -f target_db < source.sql

这样的话, 就会在phpMyAdmin里面正确看到我们的母语. 别告诉我你不行. 我行你就行, 不然对不起孔子, 也对不起王选.

昨天的项目中,若登录用户为英文,则正常,若为中文,则不能正确验证。经检查,这是由于中文处理引起的,解决方案如下:

chkpass.jsp中改为:

String name_temp = new String(request.getParameter(“name”).getBytes(“ISO8859_1”));