免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6640 | 回复: 14

求解决导出数据库乱码问题? [复制链接]

论坛徽章:
0
发表于 2007-02-27 09:24 |显示全部楼层
你随便建立一个数据库,然后将如下表、视图、数据导入,然后用mysqldump导出整个数据库检查导出的文件中中英文显示是否正常。我将my.ini文件 数据库 表等字符集设为latin1 gb2312 gbk utf8 等均有不能正常显示的现象。本来使用latin1字符集 插入中文 显示中文数据库均没问题,但是后来建立了视图,as后面的中文导出也没问题,但有一个表的字段(czy.leve)是数字 我需要在视图中将其转换为中文显示 所以加了if条件,没想到的是 无论怎样设字符集 当导出数据库后 这个视图中的if中的中文均显示为`????` 如下兰字处是导出后的效果,但将数据库设为utf8时 这个视图导出中文显示没问题 但其它汉字显示或英文字段名显示就有问题,反正视图中if条件正常了,就有的地方不正常。
if((`czy`.`leve` = 1),
    _latin1'?????',
    if((`czy`.`leve` = 2),
   _latin1?????',
    _latin1?????')) AS `级别
`

其中_latin1是我修改数据库字符集造成的 大家可以随便更改数据数据库、表字符集。

求教如何设置数据库字符集 或加什么参数导出数据库 视图中的汉字不出现以上问题,大家在你的机器上试试。我原以为mysql5.10版本的问题 结果更换了5.0.22也是如此。

注:中文不正常只出现在视图中 其它地方没问题,另外 如果视图中使用了如
select  from table where fieldname='汉字' 形式 导出数据库后'汉字' 这部分也是乱码'?????'。


drop table if exists `czy`;
CREATE TABLE `czy` (
  `czycode` char(4) NOT NULL,
  `czyname` varchar(30) default null,
  `leve` tinyint(1) default NULL,
  PRIMARY KEY  (`czycode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

drop VIEW if exists `view_czy`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_czy` AS
  select
    `czy`.`czycode` AS `代码`,
    `czy`.`czyname` as `姓名`,
    if((`czy`.`leve` = 1),
    '操作员',
    if((`czy`.`leve`=2),
    '出纳员',
    if((`czy`.`leve`=9),
    '管理员','其它'))) AS `级别`
  from
    `czy`
  order by
    `czy`.`czycode`;
   
INSERT INTO `czy` (`czycode`, `leve`, `czyname`) VALUES
  ('0000',1,'李三'),
  ('0001',2,'李四');

论坛徽章:
0
发表于 2007-02-27 10:12 |显示全部楼层
还是这个问题啊,辛苦了

论坛徽章:
0
发表于 2007-02-28 14:17 |显示全部楼层
up

论坛徽章:
0
发表于 2007-03-01 09:58 |显示全部楼层
难道真的没人能解决吗?

论坛徽章:
0
发表于 2007-03-08 14:19 |显示全部楼层
难道真的没人能解决吗?

论坛徽章:
0
发表于 2007-03-09 08:40 |显示全部楼层
原文:http://www.phpchina.com/10458/viewspace_4782.html
希望能有用。

1.数据库尽量使用utf8存储(修改/etc/my.cnf,在[mysqld]段加上default-character-set=utf8)
(已有的数据库,先转成UTF8格式)
2.PHP程序在查询数据库之前,执行mysql_query(“set names xxxx”);其中xxxx是你网页的编码(charset=xxxx),如果网页中charset=utf8,则xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,如果网页中的charset=ipaddr,则xxxx=ipaddr (开个玩笑,没这编码)几乎所有WEB程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入mysql_query(“set names”)就可以了。3.PHPMyAdmin不需要做改动。
4.需要注意的是,为保证网页实际编码(Windows保存对话框里的编码)和他声明的编码(charset=?)是一致的,请用DW之类的工具做网页。

[ 本帖最后由 hh11 于 2007-3-9 08:42 编辑 ]

论坛徽章:
0
发表于 2007-03-09 09:44 |显示全部楼层
原帖由 hsgzr 于 2007-2-27 09:24 发表
我将my.ini文件 数据库 表等字符集设为latin1 gb2312 gbk utf8 等均有不能正常显示的现象


楼上你没看到以上这段话吗?
按你的说法你试了以上代码了吗?结果如何呀?我要解决的问题你没看明白吗?我不是普通的汉字乱码问题,我要的不是应该、可能的解决方案,我要的是切实解决方案

论坛徽章:
0
发表于 2007-03-10 22:25 |显示全部楼层
原帖由 hsgzr 于 2007-3-9 09:44 发表

楼上你没看到以上这段话吗?
按你的说法你试了以上代码了吗?结果如何呀?我要解决的问题你没看明白吗?我不是普通的汉字乱码问题,我要的不是应该、可能的解决方案,我要的是切实解决方案


想要有确切的方案就考虑付费吧

论坛徽章:
0
发表于 2007-03-11 13:04 |显示全部楼层
先恢复数据库为正常状态,然后导出数据为bak.sql。

file bak.sql

然后将此文件转码为 utf8 存储。(可用editplus 以 file bak.sql 得到的正确编码打开,确认没有乱码,再以 utf8 格式另存为 bak-utf.sql). 当然你用其他工具转码也没问题。

假如"本来使用latin1字符集 插入中文 显示中文数据库均没问题," 这句话属实,则bak.sql 为laint1 即 ISO-8859-1 编码。

新建一个以 utf8 编码的库dbutf,修改 my.cnf 里 [mysqld] 与 [mysql] 两字段里 default-character-set=UTF-8

重启mysqld.

导回转换成utf8的bak-utf.sql :
mysql -D dbutf <bak-utf.sql

如果使用此db的原程序不变,则 将 my.cnf 里[mysql] 段默认字符设置注销,或者 恢复原状。

[ 本帖最后由 likuku 于 2007-3-11 14:52 编辑 ]

论坛徽章:
0
发表于 2007-03-12 17:47 |显示全部楼层
楼上谢谢你的解答 但没能解决视图中汉字乱码问题,
我的数据库只是在视图中的if后汉字和where aa='汉字' 中的汉字出现乱码,其它任何地方都没有乱码。还要麻烦你在试试给个解决方案。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP