Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238231
  • 博文数量: 79
  • 博客积分: 1942
  • 博客等级: 上尉
  • 技术积分: 910
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-19 16:17
文章分类

全部博文(79)

文章存档

2011年(1)

2010年(50)

2009年(28)

分类: LINUX

2009-07-22 22:01:15

如果你在开始的时候没有选定的正确的字符集,在运行一段时间后发现不能满足,这时候你又不想丢弃已有的数据,那么就需要对字符集进行修改了。

当前情况下不能直接通过alert database character set ……. 和 alert table tablename character set ……. ,因为这2个命令不能修改已有的字符集,而只是对新的记录或者表才生效。

对已有的记录的字符集的调整,需要先导出数据,经过调整后重新导入后完成。

以下是模拟的是将latin1字符集的数据库修改成gbk的字符集的数据库过程。

(1)导出表结构:mysqldump -u -p --default-character-set=gbk -d databasename > createtables.sql 其中--default-character-set=gbk 表示设置以什么字符集链接 , -d表示只导出表结构,而不导出数据。

(2)需要我们的对createtables.sql的表结构定中重新定义字符集

(3)在确保数据不再跟新的时候导出所有数据:mysqldump -u -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename > data.sql --quick 该选项用于转存大的表。它强制mysqldump从服务器一次一行的检索表中的行,而不是检索所有的行,并在输出前将它混存到内存中。--extended -insert:使用包括几个values列表的多行数据,这样的好处在于可以使导出文件较少,导入的时候可以加快插入速度。--no-create- info:不包含创建表的sql语句。--default-character-set=latin1:按照原有的字符集导出数据,中文都是可见的,不会保存成乱码。

(4)打开data.sql将set names latin1 改成 set names gbk;

(5)创建新的数据库(gbk),导入表 mysql -uroot -p dataname < cratetable.sql

(6)导入数据:mysql -uroot -p databasename < data.sql

以上是mysql的字符集修改。最好还有注意一个问题,选择字符集的时候,要选择原字符集的超级,或者比源字符集的字库更大的字符集。
阅读(636) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~