注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

帅小伙的博客

希望能在这里交到更多的朋友

 
 
 

日志

 
 
 
 

file和iconv使用小记  

2008-05-05 18:22:58|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 用mysqldump导出数据库时,如果客户端字符集和数据库字符集不同,则导出的文件中中文可能为乱码。

[zzx@localhost ~]$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 5.0.45-community-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show create table a;
+-------+---------------------------------------------------------------------------------------+
| Table | Create Table                                                                          |
+-------+---------------------------------------------------------------------------------------+
| a     | CREATE TABLE `a` (
  `name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk |
+-------+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

从上面可以看出,表a的字符集为gbk。

[zzx@localhost ~]$ mysqldump -uroot --default-character-set=utf8 test a >a.txt
[zzx@localhost ~]$ more a.txt
-- MySQL dump 10.11
--
。。。。。。

DROP TABLE IF EXISTS `a`;
CREATE TABLE `a` (
  `name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

--
-- Dumping data for table `a`
--

LOCK TABLES `a` WRITE;
/*!40000 ALTER TABLE `a` DISABLE KEYS */;
INSERT INTO `a` VALUES ('涓浗'),('涓浗');
/*!40000 ALTER TABLE `a` ENABLE KEYS */;
UNLOCK TABLES;
/
。。。。。。
-- Dump completed on 2008-05-16 10:50:06

此时,用file命令可以查看导出文件的字符集:
[zzx@localhost ~]$ file -i a.txt
a.txt: text/plain; charset=utf-8

然后用iconv可以将此文件转换为其他字符集的文件:
[zzx@localhost ~]$ iconv -f utf8 -t gbk a.txt >b.txt
[zzx@localhost ~]$ more b.txt
。。。。。。

DROP TABLE IF EXISTS `a`;
CREATE TABLE `a` (
  `name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

--
-- Dumping data for table `a`
--

LOCK TABLES `a` WRITE;
/*!40000 ALTER TABLE `a` DISABLE KEYS */;
INSERT INTO `a` VALUES ('中国'),('中国');
/*!40000 ALTER TABLE `a` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

。。。。。。

-- Dump completed on 2008-05-16 10:54:12

果然,数据中的乱码已经变成了中文‘中国’。

但是转换过程中也有一些困惑,比如,将utf8转换为Latin1的时候会报错:
[zzx@localhost ~]$ iconv -f utf8 -t latin1 a.txt >b.txt
iconv: illegal input sequence at position 1034

感觉utf8应该是任何字符集的超级,它怎么会无法转换为latin1呢?试了其他的字符集,也是同样问题,似乎只能在utf8和gbk或者gb2312之间转换,郁闷!
  评论这张
 
阅读(1829)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018