免费注册 查看新帖 |

Chinaunix

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

关于mysql视图汉字显示乱码问题? [复制链接]

论坛徽章:
0
发表于 2007-02-13 11:20 |显示全部楼层
做了个视图如下 (1)
CREATE  VIEW `viewaa` AS
select
    `czy`.`czycode` AS `代码`,
    `czy`.`czyname` AS `姓名`,
    if((`czy`.`leve` = 0),  管理员',  if((`czy`.`leve` = 3),    '操作员',   if((`czy`.`leve` = 4),'出纳员','其它'))) AS `级别`
  from
    `czy`

用ems工具装入后在视图显示的汉字没有问题,但在DDL中显示为如下:(2)
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `viewaa` AS
select
    `czy`.`czycode` AS `代码`,
    `czy`.`czyname` AS `姓名`,
    if((`czy`.`leve` = 0),
    _latin1'?????',
    if((`czy`.`leve` = 3),
    _latin1'?????',
    if((`czy`.`leve` = 4),
    _latin1'?????',
    _latin1'???'))) AS `级别`
  from
    `czy`
其中条件中的汉字成了乱码。

所以在做数据库完整导出后 视图部分就成了如(2)所示,在做数据库完整导入时 该视图条件部分就显示成了乱码,请教如何导出数据库时如(1)视图能将汉字部分完整导出,以致于装入后能视图能正常显示

论坛徽章:
0
发表于 2007-02-13 17:33 |显示全部楼层
1. 服务器默认字符集是什么
2. 该数据表的字符集是什么
3. 连接查询的客户端字符集是什么

论坛徽章:
0
发表于 2007-02-13 18:02 |显示全部楼层
全是latin1

论坛徽章:
0
发表于 2007-02-13 21:04 |显示全部楼层
导出时指定正确的字符集即可,参见mysqldump的用法。ems连接时也设定正确的字符集

论坛徽章:
0
发表于 2007-02-14 14:52 |显示全部楼层
latin1 是支持中文的 其它地方中文都没问题,在过程中的条件中文也问题,只是在视图中使用条件时返回中文时有问题,导入后在ems中的DDL中就已经是乱码了

论坛徽章:
0
发表于 2007-02-14 14:56 |显示全部楼层
另外 如何在导出数据库时 给过程和视图部分加上drop .... if exists 之类语句 数据库和表能加上,只有过程和视图没有。

论坛徽章:
0
发表于 2007-02-14 15:40 |显示全部楼层
我都试过了 无论是什么字符集 如gb2312 gbk 等 在视图
if((`czy`.`leve` = 0),  管理员',  if((`czy`.`leve` = 3),    '操作员',   if((`czy`.`leve` = 4),'出纳员','其它'))) AS `级别`
一创建或一导入就已经变成了
if((`czy`.`leve` = 0),
    _latin1'?????',
    if((`czy`.`leve` = 3),
    _latin1'?????',
    if((`czy`.`leve` = 4),
    _latin1'?????',
    _latin1'???'))) AS `级别`

论坛徽章:
0
发表于 2007-02-14 17:09 |显示全部楼层
你用的客户端是不是有问题?
我也是使用EMS,但它似乎只支持本地编码(GB2132或GBK),而我的数据库是使用UTF-8。
虽然情况与你的情况不相同,但我总是不太信认EMS(特别是在编码方面)

[ 本帖最后由 jiangshachina 于 2007-2-14 17:22 编辑 ]

论坛徽章:
0
发表于 2007-02-14 21:44 |显示全部楼层
你可以做一个类似我这样的视图例子 看如何设置各个字符集 种种字符集我都用了 如果数据库设为gb2312 或gbk 视图中的条件返回汉字导出是乱码 如果导入时在条件.中限定字符集 如
CREATE  VIEW `viewaa` AS
select
    `czy`.`czycode` AS `代码`,
    `czy`.`czyname` AS `姓名`,
    if((`czy`.`leve` = 0),  管理员',  if((`czy`.`leve` = 3),    '操作员',   if((`czy`.`leve` = 4),'出纳员',_utf8 '其它'))) AS `级别`
  from
    `czy`
那么导出后是
CREATE  VIEW `viewaa` AS
select
    `czy`.`czycode` AS `代码`,
    `czy`.`czyname` AS `姓名`,
    if((`czy`.`leve` = 0),  管理员',  if((`czy`.`leve` = 3),    '操作员',   if((`czy`.`leve` = 4),'出纳员','???))) AS `级别`
  from
    `czy`
如果每一个汉字串都限定字符集 那么导出的条件中的汉字全是乱码 只有最后一个汉字串设定为utf8 它前面返回字符是中文 而被限定了字符集的这个值是乱码

论坛徽章:
0
发表于 2007-02-15 09:23 |显示全部楼层
另外 如何在导出数据库时 给过程和视图部分加上drop .... if exists 之类语句 数据库和表能加上,只有过程和视图没有。
有啊。
直接用命令mysqldump -uUser -pPasswd -hHost -BR mydb > mydb.sql就OK啊。
会如下形式的语句:
/*!50003 DROP PROCEDURE IF EXISTS `myprocedure` */;;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP