正在加载......
类别:[Linux/Unix]  时间: 2008-12-19 12:18:51; 浏览: 30856; 评论: 0  

      昨天发现一个很奇怪的bug,一个分析log的程序,一个小时产生一个log文件,文件名中含有当时的小时数以作标识,其中小时为有前导零的24 小时格式。bug是第08和09小时的log为空,甚为诧异。

      分析程序后,定位于08和09这两个数字上。程序中有一步需要对小时数进行数学运算,问题就在于此,例如:

以下是代码片段:
[root@login yayu]# echo $((08 -2))
bash: 08: value too great for base (error token is "08")

      Google了一下找到了答案:原文点这![建议新窗口打开]

      原因:

以下是代码片段:
Numbers starting with leading 0 are Octal numbers  (base 8) in many programming
languages including C, Perl and shell. Valid octal digits are
0,1,2,3,4,5,6,7 so it barfs if it sees an 8 or a 9. You probably want
to work in straight numbers and make a leading 0 in your output
format with a sprintf("%02d") kind of formatting thing.
Anything starting with 0x or 0X is a hex number.

So the error message means exactly as it says- it's an error from
the let function complaining about the value being too big for the base.

Have fun,
Stuart.

      解决方案:

以下是代码片段:
You can explicitly state the base of a number using base#number
Code:
if [ $((10#$item)) -eq 0 ] ; then
That will have trouble if the number starts with a minus sign.
The '-' needs to be in front of the base like -10#009 for -9.

      原来是进制的问题,C, Perl 和 shell中以0开头的数字是八进制了,而在运算中也是严格如此,不会做自动转化,于是就报错了。如下解决:

以下是引用片段:
[root@login shengting]# echo $((10#08 -2))
6

      纠结问题的根源,还是我的shell写得太烂了......如果命令用得好就不会遇到这个bug了,不过写得好了,又怎么会在以后避免进制导致的问题呢?到底是先有鸡还是先有蛋呢?

也许您对下面的文章感兴趣:
类别:[MySQL学习]  时间: 2008-12-10 12:24:26; 浏览: 19447; 评论: 1  
Tags : 外键

      首先,目前MySQL的外键约束只适用于InnoDB数据表。

      创建外键约束时,如果把握不好,将无法创建,比如提示你:

以下是引用片段:

ERROR 1005 (HY000): Can't create table './dbname/tablename.frm' (errno: 150)

      为了查看更详细的信息,mysql提供了一个命令:

以下是引用片段:

show innodb status;

或者:

show engine innodb status;

      其中有一项“LATEST FOREIGN KEY ERROR”显示了最近的一次外键约束出错的详细信息,如:

以下是引用片段:

LATEST FOREIGN KEY ERROR
------------------------
081210 11:57:40 Error in foreign key constraint of table dbname/tablename:
foreign key (`gid`, `uid`) references `table2`(`gid`, `uid`)
) ENGINE = InnoDB:
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
for correct foreign key definition.

     提问:不知道mysql其它的错误,有没有方法得到这样的提示?

也许您对下面的文章感兴趣:
    很抱歉暂时没有!
类别:[随便说说]  时间: 2008-12-02 12:52:47; 浏览: 85121; 评论: 0  

      今天去注册一个网易的邮箱,可能对方出现网络繁忙或其他原因,一直就停在注册页面,IE的进度条一直停滞不前,于是又点提交了一下,结果提示email被占用了。

      想必是我的注册名已经进入了对方的数据库,但一直没返回给前端页面信息。于是转而直接登录,或许帐号信息初始化工作未完成,便提示我是选择激活3G容量邮箱或注册另一个邮箱。当然,我选择了激活,为了不给对方有垃圾数据的机会嘛。

      经过漫长的页面加载,雷人的页面出现了,偶看见了前无古人的超长验证码:

    偶一看,彻底无语了,即使是机器人恶意注册,也不能这么难为机器人啊...... 如此超长的验证码,让我连续输入了好几遍都没有成功。

    验证码,对于技术人员而言是面对恶意攻击一个无奈的选择,因为它毕竟带来了低效的用户体验。网易邮箱做出了如此雷人、牛逼的选择,想必是无可奈何到了无以复加的地步了吧:)

也许您对下面的文章感兴趣:
  1. [2010-05-06 23:35:58] 验证码的使用场景小议
类别:[Linux/Unix]  时间: 2008-11-28 22:30:26; 浏览: 74142; 评论: 0  
类别:[随便说说]  时间: 2008-11-19 19:18:05; 浏览: 92809; 评论: 3  
Tags : 生活
类别:[随便说说]  时间: 2008-10-23 23:28:51; 浏览: 20862; 评论: 0  
Tags : 工作 职业
类别:[随便说说]  时间: 2008-10-22 16:07:59; 浏览: 31030; 评论: 0  
类别:[Linux/Unix]  时间: 2008-10-14 22:37:13; 浏览: 51838; 评论: 0  
Tags : man 命令
类别:[MySQL学习]  时间: 2008-10-09 12:15:03; 浏览: 44605; 评论: 0  
类别:[随便说说]  时间: 2008-09-26 17:36:34; 浏览: 57958; 评论: 0  
[197][5/20][1][2][3][4][5][6][7][8][9][10][>|] | 回页首
© 2004 - 2018 芽雨快跑 - 本页面所有内容,未经芽雨许可,欢迎转载,请注明出处

京ICP备09017802号