Home | Syndication | Delicious | Douban | Twitter

Archive for September, 2005

Migrate to MySQL 4.1 using unicode

September 6th, 2005

使用MySQL有年头了,受限于MySQL支持的字符集与编码,我以前的应用都是使用gb2312/gbk. 从4.1开始,MySQL正式支持unicode,以下是我的迁移实践。

Scenario:
现有的数据库mydb构建在MySQL 4.0.20上,使用gb2312作为缺省字符集,需要将其迁移到MySQL 4.1.14且使用utf8作为其缺省字符集。
MySQL 4.0.20 安装在 /opt/mysql 下,使用3306端口
MySQL 4.1.14 安装在 /opt/mysql2 下,使用3326端口

Migration:

首先把目前使用gb2312的数据库mydb中的内容使用mysqldump导出:

# /opt/mysql/bin/mysqldump -uroot -hlocalhost -pthepasswd -P3306 mydb > /backup/mydb_20050905.sql

接着使用此数据文件来构建目标库mydb_new :

Step 1, 使用缺省字符集(utf8)连接MySQL Server,然后使用字符集gb2312来创建目标库mydb_new.
# /opt/mysql2/bin/mysql -uroot -hlocalhost -pthepasswd -P3326
mysql> create database mydb_new default character set gb2312 collate gb2312_chinese_ci;
mysql> quit

Step 2, 使用字符集gb2312连接MySQL Server,然后运行先前导出的sql数据文件.
# /opt/mysql2/bin/mysql -uroot -hlocalhost -pthepasswd -P3326 --default-character-set=gb2312
mysql> use mydb_new
mysql> source /backup/mydb_20050905.sql
mysql> quit

Step 3, 使用缺省字符集(utf8)连接MySQL Server,然后依次修改数据库mydb_new中的每个table的缺省字符集为utf8.
# /opt/mysql2/bin/mysql -uroot -hlocalhost -pthepasswd -P3326
mysql> use mydb_new
mysql> alter table table_xxx convert to character set utf8 collate utf8_general_ci;
mysql> quit

Step 4, 使用缺省字符集(utf8)连接MySQL Server,然后修改数据库mydb_new的缺省字符集为utf8.
# /opt/mysql2/bin/mysql -uroot -hlocalhost -pthepasswd -P3326
mysql> alter database mydb_new default character set utf8 collate utf8_general_ci;
mysql> quit

OK.

Updates:

不知为何,mysqldump很容易丢失数据,特别是长文章,莫名其妙地被截去了一些内容。后来我都是自己写程序从原先的库里读、再按ID对应更新到新的库里面去。我猜应该是由于特殊字符导致的。

灯亮灯灭

September 1st, 2005

每天上下班都会经过一个蛋糕店,门口的招牌上用霓虹灯写着“生日蛋糕”四个字,天色暗下的时候,店主就会把灯点亮,从左向右略微带有波纹的变幻样式,动静有度,很增气氛。过了些日子最后一个字不亮了,变成了“生日蛋”,哑然失笑之余觉得人生日送鸡蛋祝贺也不错,在乡下就有这样的习俗。今晚加班,走时已近深夜,当车子经过那家店时,我突然发现又有一个字的灯不亮了,这下倒好,变成了“生蛋”,我不禁笑了,司机问我为什么笑。

想起了很久已经读过的一篇小文章,也是讲霓虹灯。一个晚上作者坐车经过一条不常走的路,远远地看见路边有一家鞋店,题名“品鞋屋”,霓虹灯安静地亮着,作者很为这个“品”字所倾倒,于是觉得那很普通的灯、很小的店也是那么的不一样,入眼一切都那么好,继而推测店主应该是一个很有人文气质的人。第二天她特地绕路来拜访这家不一样的小店,没想到在白天她看到的店名居然是普通的不能再普通的——“精品鞋屋”,作者于是感叹在这个商业年代追求文字的幽雅无疑是缘木求鱼。