转换数据库字符集 两种方法,
QUOTE: 第一种----更改存储字符集 主要的思想就是把数据库的字符集有latin1改为gbk,big5,或者utf8; 以下操作必须拥有主机权限。假设当前操作的数据库名为:database
导出 首先需要把数据导为mysql4.0的格式,具体的命令如下: mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt databse > d4.sql
--default-characte-set 以前数据库的字符集,这个一般情况下都是latin1的, --set-charset 导出的数据的字符集,这个可以设置为gbk,utf8,或者big5 导入 首先使用下面语句新建一个GBK字符集的数据库(test)
CREATE DATABASE `d4` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; 然后把刚才导出的数据导入到当前的数据库中就ok了。
mysql -uroot -p --default-character-set=gbk -f d4<d4.sql 通过以上的导出和导入就把数据库的字符集改为正确的存储方式了。
其中d4为新建库的名称,d4.sql为导出文件的名字
但是这种方法,发现数据库数据存储量无端变大30%,真是郁闷
QUOTE: 另外一种其实原理相同,但是需要手动操作,一般用于第一种方法失败后的选择 不过这种方法如果数据库很大,估计很难做,因为光打开文件就能让你死机
首先还是用phpmyadmin或者用mysql本身的dump导出 .sql文件
然后用UltraEdit打开你备份的所有xxxx.sql文件,查找
[Copy to clipboard] [ - ] CODE: DEFAULT CHARSET=latin1
latin1这里也许是别的,反正是你不想要的,要转成gbk或者big5的字符集 把这个替换为“空” 在查找
[Copy to clipboard] [ - ] CODE: CREATE TABLE cdb_sessions ( sid char(6) character set latin1 collate latin1_bin NOT NULL default '''', ip1 tinyint(3) unsigned NOT NULL default ''0'', ip2 tinyint(3) unsigned NOT NULL default ''0'', ip3 tinyint(3) unsigned NOT NULL default ''0'', ip4 tinyint(3) unsigned NOT NULL default ''0'', uid mediumint(8) unsigned NOT NULL default ''0'', username char(15) NOT NULL default '''', groupid smallint(6) unsigned NOT NULL default ''0'', styleid smallint(6) unsigned NOT NULL default ''0'', invisible tinyint(1) NOT NULL default ''0'', `action` tinyint(1) unsigned NOT NULL default ''0'', lastactivity int(10) unsigned NOT NUL
|