2013年8月8日星期四

MySQL 表转换字符集:gbk --> utf8

有表 tb_nickname 结构如下:
CREATE TABLE `tb_nickname` (
  `P_NickName` varchar(22) NOT NULL DEFAULT '',
  PRIMARY KEY (`P_NickName`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

表中已有上万条记录,包含大量中文名称。
现在我们要把所有记录的字符集编码由 gbk 转换为 utf8 。
首先我们在新数据库 new_nickdb 中创建新表:
CREATE TABLE `tb_nickname` (
  `P_NickName` varchar(22) NOT NULL DEFAULT '',
  PRIMARY KEY (`P_NickName`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

之后我们导出旧表中的数据,为了保证数据正确导出,应当使用 --default-character-set 指定连接时的字符集为 gbk ,否则连接时会按照数据库默认的连接字符集进行转码,导致导出的数据出现大量的乱码。
mysqldump -uUser -pPass --no-create-info --default-character-set=gbk nickdb tb_nickname > /tmp/tb_nickname.sql

我们是否需要用 vi 打开 tb_nickname.sql ,并把其中的 SET NAMES gbk 手动改为 SET NAMES utf8 呢?答案是否定的,而且千万不要这么做!
起先我是按《深入浅出:MySQL 数据库开发、优化和管理维护》中的步骤来做的,上面说要进行修改,我不知道是否是因为他们的 MySQL 版本比较低——5.0 版本——我的是 5.1 ,这样修改之后是不会通过的。

最后将数据导入新库新表:
mysql --default-character-set=utf8 new_nickdb < tb_nickname.sql

天使之卵,宫崎英高

观看天使之卵的画面,就像在一个狂人的梦中奔跑。押井守说他曾经想去攻读宗教神学,他应该是对宗教中的各种思辨非常感兴趣吧。据说天使之卵的构想来自于押井守的一个想法:即倘若大洪水没有褪去,反而一直持续下去,几个世纪之后,方舟上生活的人类会是什么样子呢?电影中的方舟,如果不看到最后,就像...