mysql 奇怪的问题-很急,解决不了都回不了家过年了!!

WorkJava 2006-01-20 11:43:46
有这样几个问题,
1)在建立表结构的时候,某个字段是varchar(255)现在变成了varchar(85),另外一个是varchar(20)现在变成了varchar(6),还有一个是varchar(19)现在也变成了varchar(6),这样变化的原因是什么呢???这个表过去不是我维护的,又一次服务器曾经瘫痪过,不知道怎么恢复的。
而里面的数据是正常的,甚至现在虽然定义的是varchar(6),但是却比varchar(6)还大,肯能是7位的。

2)现在检索用like 就可以,没有通配符号,用=就不可以
用〉=可以,用<=也可以,并且有交集,但是<=和>=之间用and连接就有没有结果

那位大哥知道哇,快帮帮我呀!!
...全文
195 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
WorkJava 2006-01-23
  • 打赏
  • 举报
回复
各位谢谢了,上述方案是不可行的,谢谢了
WorkJava 2006-01-23
  • 打赏
  • 举报
回复
再追问一个,现在的确好了,我恢复成原来的大小用的是“alter table XXX modify [field] varchar(255)”这样的命令,但是由于数据库表的数据很多,执行起来速度很慢,
例如恢复下表:
mysql> alter TABLE AAA modify a1 VARCHAR(255), modify a2 VARCHAR(19), modify a3 VARCHAR(255), modify a4 VARCHAR(20) , modify a5 VARCHAR(255);
Query OK, 16404572 rows affected (7 hours 14 min 32.56 sec)
Records: 16404572 Duplicates: 0 Warnings: 0

竟然用了7个多小时,我又大概25各这样的表,那就要很长时间了,虽然可以做批处理去执行,但是太慢了!!!!!

现在有这样一种方案,叙述如下:
考虑到mysql的表的定义文件放在*.frm的文件中,我不能直接编辑,但是我可以不可以先建立另外一个数据库,把我用到的表在新的库里面建立起来,之后再将新的*.frm 复制到旧的里面去,
将原来的覆盖掉,这种方式不知道师是否可行,请各位大侠指导一二……小弟不胜感激……
WorkJava 2006-01-20
  • 打赏
  • 举报
回复
1)的再描述
mysql> desc ALLCOUNT;
+--------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| DateTime | varchar(6) | | PRI | | |
| AllKwdCookie | int(10) unsigned | | | 0 | |
| AllKwdCount | int(10) unsigned | | | 0 | |
| AllURLCookie | int(10) unsigned | | | 0 | |
| AllURLCount | int(10) unsigned | | | 0 | |
+--------------+------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> select * from ALLCOUNT limit 10;
+------------+--------------+-------------+--------------+-------------+
| DateTime | AllKwdCookie | AllKwdCount | AllURLCookie | AllURLCount |
+------------+--------------+-------------+--------------+-------------+
| 2003/08/03 | 179523 | 20225 | 166938 | 64160 |
| 2004/01/01 | 135792 | 11208 | 170658 | 60828 |
| 2004/01/02 | 141121 | 12399 | 179837 | 68059 |
| 2004/01/03 | 147457 | 13218 | 183562 | 72012 |
| 2004/01/04 | 166046 | 14771 | 209884 | 83963 |
| 2004/01/05 | 167914 | 15156 | 213344 | 85690 |
| 2004/01/06 | 163873 | 15318 | 208529 | 84720 |
| 2004/01/07 | 161460 | 15369 | 206321 | 85636 |
| 2004/01/08 | 151148 | 14689 | 189264 | 79830 |
| 2004/01/09 | 138990 | 13723 | 172255 | 71874 |
+------------+--------------+-------------+--------------+-------------+
10 rows in set (0.00 sec)

mysql> select * from ALLCOUNT where DateTime = '2003/08/03';
Empty set (0.00 sec)

mysql> select * from ALLCOUNT where DateTime like '2003/08/03';
+------------+--------------+-------------+--------------+-------------+
| DateTime | AllKwdCookie | AllKwdCount | AllURLCookie | AllURLCount |
+------------+--------------+-------------+--------------+-------------+
| 2003/08/03 | 179523 | 20225 | 166938 | 64160 |
+------------+--------------+-------------+--------------+-------------+
1 row in set (0.00 sec)

mysql>
WorkJava 2006-01-20
  • 打赏
  • 举报
回复
2)的sql文以及结果
mysql> select * from ALLCOUNT where DateTime <= '2003/08/11' order by DateTime limit 10;
+------------+--------------+-------------+--------------+-------------+
| DateTime | AllKwdCookie | AllKwdCount | AllURLCookie | AllURLCount |
+------------+--------------+-------------+--------------+-------------+
| 2003/08/03 | 179523 | 20225 | 166938 | 64160 |
| 2003/08/04 | 178936 | 20631 | 165948 | 63174 |
| 2003/08/05 | 181255 | 20499 | 171849 | 65116 |
| 2003/08/06 | 175610 | 20002 | 166093 | 63465 |
| 2003/08/07 | 188486 | 20761 | 185929 | 67592 |
| 2003/08/08 | 210871 | 21210 | 219330 | 74330 |
| 2003/08/09 | 224249 | 22236 | 234098 | 81990 |
| 2003/08/10 | 167965 | 18464 | 166230 | 63896 |
| 2003/08/11 | 179773 | 20250 | 177891 | 68178 |
+------------+--------------+-------------+--------------+-------------+
9 rows in set (0.00 sec)

mysql> select * from ALLCOUNT where DateTime >= '2003/08/10' order by DateTime limit 10;
+------------+--------------+-------------+--------------+-------------+
| DateTime | AllKwdCookie | AllKwdCount | AllURLCookie | AllURLCount |
+------------+--------------+-------------+--------------+-------------+
| 2003/08/10 | 167965 | 18464 | 166230 | 63896 |
| 2003/08/11 | 179773 | 20250 | 177891 | 68178 |
| 2003/08/12 | 193568 | 20814 | 198085 | 69889 |
| 2003/08/13 | 181166 | 18898 | 182024 | 63891 |
| 2003/08/14 | 194177 | 20425 | 192266 | 68594 |
| 2003/08/15 | 185653 | 19190 | 184531 | 64928 |
| 2003/08/16 | 171902 | 18741 | 168505 | 62526 |
| 2003/08/17 | 186875 | 20345 | 181539 | 67322 |
| 2003/08/18 | 179347 | 20303 | 171451 | 63656 |
| 2003/08/19 | 162491 | 16660 | 177173 | 67574 |
+------------+--------------+-------------+--------------+-------------+
10 rows in set (0.00 sec)

mysql> select * from ALLCOUNT where DateTime <= '2003/08/11' and DateTime >= '2003/08/10' order by DateTime limit 10
;
Empty set (0.00 sec)

mysql>
jessonq 2006-01-20
  • 打赏
  • 举报
回复
还是把电脑关了回家过年把 我看着就累啊
WorkJava 2006-01-20
  • 打赏
  • 举报
回复
2)的补充标结果如下
mysql> desc ALLCOUNT;
+--------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| DateTime | varchar(6) | | PRI | | |
| AllKwdCookie | int(10) unsigned | | | 0 | |
| AllKwdCount | int(10) unsigned | | | 0 | |
| AllURLCookie | int(10) unsigned | | | 0 | |
| AllURLCount | int(10) unsigned | | | 0 | |
+--------------+------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
jouwei 2006-01-20
  • 打赏
  • 举报
回复
大家都说没有问题,那就没问题,我看事你眼花了
我还是回家过年去了!!
小辉 2006-01-20
  • 打赏
  • 举报
回复
2)的情况
我把 DateTime 是 时间 和 字符串 的情况都试了
没有问题啊
小辉 2006-01-20
  • 打赏
  • 举报
回复
2)的情况我试过了,没有问题啊
小辉 2006-01-20
  • 打赏
  • 举报
回复
1)的情况我也遇到过,我发现是这么个规律
比如 varchar(255)现在变成了varchar(85)的时候,恰好这个字段里,长度最大的值是 85 ,对以前的数据没有什么影响 具体为什么 我也不知道
我就把它恢复回去了
你把它 恢复回去吧
XqYuan 2006-01-20
  • 打赏
  • 举报
回复
先恢复到原来的大小试一下行不行,我遇到过一次这个问题,恢复回去就好了

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧