末猪 发表于 2013-1-6 17:03:45

MySQL查询问题

各位大虾:
   小弟最近将社区版的库通过sqldump备成脚本,然后再到企业版中导入。查询结果乱码不说(数据库字符集两库一致),里面创建的视图居然不能用,把视图里面的查询语句拷贝单独执行又能查询出结果,将查询语句另起一个新视图名创建后查询又能出结果。我就糊涂了。
   求各位指点方向。

就这视图,用视图名称查结果为空,用下面的语句查结果正常。将下面的查询语句起一新视图名创建,又能查出结果。
create view v_jh_ringing_ycIndex
as
select '下载同歌三次以上' as 'ycIndexName',left(lie6*100,INSTR(lie6*100,'.')+2) as 'ycValue' from jh_ringing where city = convert('全省' using gbk)
union
select '下载无流量' as 'ycIndexName',left(lie10*100,INSTR(lie10*100,'.')+2) as 'ycValue' from jh_ringing where city = convert('全省' using gbk)
union
select '无效用户' as 'ycIndexName',left(lie14*100,INSTR(lie14*100,'.')+2) as 'ycValue' from jh_ringing where city = convert('全省' using gbk)
union
select '下载同CP歌曲+振铃15次以上' as 'ycIndexName',left(lie18*100,INSTR(lie18*100,'.')+2) as 'ycValue' from jh_ringing where city = convert('全省' using gbk);

这个视图使用上面的视图
................
UNION
select
'振铃' as 'busName',
lie22 as 'bili',
(select CONCAT(ycindexName,concat('--',ycValue,'%')) from v_jh_ringing_ycIndex order by ycValue desc limit 1) as 'ycIndex',
(select GROUP_CONCAT(city) as 'city' from v_jh_ringing_city where qujian = 1 group by qujian) as 'Exceed10',
(select GROUP_CONCAT(city) as 'city' from v_jh_ringing_city where qujian = 2 group by qujian) as 'Between10and8',
(select GROUP_CONCAT(city) as 'city' from v_jh_ringing_city where qujian = 3 group by qujian) as 'NotExcessive'
from
jh_ringing
where
city=convert('全省' using gbk);

字符集情况
character_set_client   gbk
                   _connectiongbk
                   _database gbk
                   _filesystembinary
                   _resultsgbk
                   _serverutf8
                   _system utf8





末猪 发表于 2013-1-6 17:11:41

先谢谢各位先,再帮我看一下脚本有没有可以优化的地方。劳驾。

kider 发表于 2013-1-7 10:18:21

你dump出来的视图应该已经不是原来的SQL了。

MySQL不会保持原始视图的SQL。
可以通过load_file()函数打开视图.frm文件查看。如下:

kider 发表于 2013-1-7 10:20:36

另外应该不区分社区版企业版的吧,你都是什么版本?
乱码问题,你可以在导出导入时强制加上字符集设置参数试试...

末猪 发表于 2013-1-7 11:11:43

kider 发表于 2013-1-7 10:20 static/image/common/back.gif
另外应该不区分社区版企业版的吧,你都是什么版本?
乱码问题,你可以在导出导入时强制加上字符集设置参数 ...

乱码:W2003Ent R2,X64,Mysql_5.5.28.3_Enterprise.我是直接用Windows自带的文本编辑器打开mysqldump导出脚本,拷贝至CMD中执行的。我用程序导入库的数据就没乱码了。可能是文件编辑器的编码和mysql存在矛盾。我会按照你的建议测试一下。
非常感谢,kider.

末猪 发表于 2013-1-7 11:15:34

kider 发表于 2013-1-7 10:18 static/image/common/back.gif
你dump出来的视图应该已经不是原来的SQL了。

MySQL不会保持原始视图的SQL。


这个函数和show create table有什么区别?求教。

末猪 发表于 2013-1-7 14:31:11

kider 发表于 2013-1-7 10:18 static/image/common/back.gif
你dump出来的视图应该已经不是原来的SQL了。

MySQL不会保持原始视图的SQL。


咋是NULL 那?

末猪 发表于 2013-1-7 15:23:55

kider 发表于 2013-1-7 10:18 static/image/common/back.gif
你dump出来的视图应该已经不是原来的SQL了。

MySQL不会保持原始视图的SQL。


直接打开frm(备份文件)文件,将里面的代码复制出来也能查询出来结果。我看还是将脚本一个一个的执行算了。

末猪 发表于 2013-1-7 15:53:37

本帖最后由 末猪 于 2013-1-7 16:26 编辑

谢谢各位,问题解决了。将库、表、视图(非sqldump导出脚本)挨个重新执行一遍又正常了。不能图快呀。但第一次和第二次插入数据的顺序不一样。第一次是将库、表、视图建好后插入;第二次是建表好后就插入的数据。这是否有影响。求教。
页: [1]
查看完整版本: MySQL查询问题