拜牛人--牛人谈“选择起薪10w的工作还是读浙大计算机研究生?” (随便说说)
发布于 2008-09-23 12:45 阅读:18842 评论:0 标签: 职业规划

      未来的路怎么走?

      考虑中国的国情,你应该是相信自己的实力、社会公平性的不断发展,走自己想走的路;还是向现实妥协,依托家族的力量、顺应和谐社会潜规则?

      人总是在变,也许你今天豪气冲天,明天就会因为无力改变现状而苦恼,黯然神伤,准备退而其次;又或许你今天选择安逸、追求平淡、舒坦的生活,明天就有可能为自己那一点可能存在的才华而叹息。

      今天,我在CSDN的一个帖子里面:选择起薪10w的工作还是读浙大计算机研究生?。看见一牛人gzlucky给出了强解:

以下是引用片段:

你的确需要规划一下你的人生.

        毕业    继续深造
读研究生 ----*-----*--> 在国内读博士? ( 傻了, 赶快赚钱吧, 还读,等毕业,IT换了好几代了)
            |          |
            |          *--> 到国外深造 --> 留洋/海归 --> .....
            |
            *--> 找外企实现价值(不找外企,你会后悔当初没入电力局)---*--> 职业经理人,CIO,C?O 
                                  | 
                                  *--> 自己创业 
                                  | 
                                  *--> 碌碌无为,后悔当初没选择电力局 
      

                        深暗官场之道?
电力局  ---> 结婚 ---> 生子 ------*-Yes--> 处级,局级,....... 
                                    | 
                                    *-No---> 科员,科级,后悔当初没读书!


开开玩笑,轻松轻松.

    看后,不禁嘘嘘。一篇名为《HP大中华区总裁孙振耀退休十五天后九大感言》的文章,提出了一个观点:

以下是引用片段:

  你工作快乐么?你的工作好么?

  有没有觉得干了一段时间以后工作很不开心?有没有觉得自己入错了行?有没有觉得自己没有得到应有的待遇?有没有觉得工作像一团乱麻每天上班都是一种痛苦?有没有很想换个工作?有没有觉得其实现在的公司并没有当初想象得那么好?有没有觉得这份工作是当初因为生存压力而找的,实在不适合自己?你从工作中得到你想要得到的了么?你每天开心么?

  天涯上愤怒的人很多,你有没有想过,你为什么不快乐?你为什么愤怒?

  其实,你不快乐的根源,是因为你不知道要什么!你不知道要什么,所以你不知道去追求什么,你不知道追求什么,所以你什么也得不到。

    以此共勉!

展开全文  
收起全文  
MySQL字符串比较函数学习(一) (MySQL学习)
发布于 2008-09-22 22:23 阅读:29153 评论:0 标签: MySQL 字符串比较

       通览了一下手册,发现MySQL的字符串函数和PHP的函数在功能还是有很多地方相似的,很多都能在php中找到对应的函数。所以在这里,要向大家推荐一个文章:PHP 中执行排序与 MySQL 中排序。作者:明灵(dragon) , Fenng 。地址:http://www.dbanotes.net/arch/php_mysql_sort.html

      好,回到本文。先说两个特别的地方:

      1:函数中,假如结果的长度大于 max_allowed_packet 系统变量的最大值时,字符串值函数的返回值为NULL。请参见7.5.2节,“调节服务器参数”(http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#server-parameters)。

      2:和PHP等编程语言不同,对于在字符串位置操作的函数,第一个位置的编号为 1。

      下面开始函数学习:

      1:字符串连接函数

      CONCAT(str1,str2,...)

      返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

以下是代码片段:

mysql> SELECT CONCAT('My', 'S', 'QL');
        -> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');
        -> NULL

mysql> SELECT CONCAT(14.3);
        -> '14.3'

      下面这个concat_ws是concat的变体:

      CONCAT_WS(separator,str1,str2,...)

      CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。   第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

以下是代码片段:

mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');
        -> 'First name,Second name,Last Name'

mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');
        -> 'First name,Last Name'


      CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

      这个函数和php的explode和implode、list、extract相似了。有兴趣的可以看看php的手册。

      2:字符串剪接函数

      INSERT(str,pos,len,newstr)

      这个函数,mysql中文手册翻译得太烂了,还是偶自己来吧:

      这个函数返回一个字符串:

      A:str字符串从位置pos(从1开始计算)开始(含第pos位),之后的pos位被字符串newstr取代;
      B:如果pos大于str的长度,则从str后面开始衔接;
      C:如果因len超出余后的长度,则位置pos之后(含第pos位)全被取代;
      D:如果pos为负数,返回str;
      E:如果len为负数,则情同len超出余后的长度,这和php的substr之类的函数不一样。

以下是代码片段:

mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
        -> 'QuWhattic'

mysql> SELECT INSERT('Quadratic', -1, 4, 'What');
        -> 'Quadratic'

mysql> SELECT INSERT('Quadratic', 3, 100, 'What');
        -> 'QuWhat'


      这个函数支持多字节字元。


      3:进制转换函数

      CONV(N,from_base,to_base)

      不同数基间转换数字。返回值为数字的N字符串表示,由from_base基转化为 to_base 基。如有任意一个参数为NULL,则返回值为 NULL。自变量 N 被理解为一个整数,但是可以被指定为一个整数或字符串。最小基数为 2 ,而最大基数则为 36。 If to_base 是一个负数,则 N 被看作一个带符号数。否则, N 被看作无符号数。 CONV() 的运行精确度为 64比特。

以下是代码片段:

mysql> SELECT CONV('a',16,2);
        -> '1010'
mysql> SELECT CONV('6E',18,8);
        -> '172'
mysql> SELECT CONV(-17,10,-18);
        -> '-H'
mysql> SELECT CONV(10+'10'+'10'+0xa,10,10);
        -> '40'

      请看PHP的:

      base_convert ― 在任意进制之间转换数字

      说明:
      string base_convert ( string $number , int $frombase , int $tobase )
      返回一字符串,包含 number 以 tobase 进制的表示。number 本身的进制由 frombase 指定。frombase 和 tobase 都只能在 2 和 36 之间(包括 2 和 36)。高于十进制的数字用字母 a-z 表示,例如 a 表示 10,b 表示 11 以及 z 表示 35。

      MySQL的进制转换函数还有一个,是一个为16进制而定义的函数:

      HEX(N_or_S)

      如果N_OR_S 是一个数字,则返回一个 十六进制值 N 的字符串表示,在这里,   N 是一个longlong (BIGINT)数。这相当于 CONV(N,10,16)。

      如果N_OR_S 是一个字符串,则返回值为一个N_OR_S的十六进制字符串表示, 其中每个N_OR_S 里的每个字符被转化为两个十六进制数字。

以下是代码片段:

mysql> SELECT HEX(255);
        -> 'FF'
mysql> SELECT 0x616263;
        -> 'abc'
mysql> SELECT HEX('abc');
        -> 616263

      4:字符查找定位函数

      ELT(N,str1,str2,str3,...)

      若N = 1,则返回值为  str1 ,若N = 2,则返回值为 str2 ,以此类推。   若N 小于1或大于参数的数目,则返回值为 NULL 。 ELT() 是  FIELD()的补数。

以下是代码片段:

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
        -> 'ej'
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
        -> 'foo'

      看见上面这个函数,还以为主要起逻辑判断用的,如:

以下是代码片段:

mysql> SELECT ELT(if(1, 2, 3), 'ej', 'Heja', 'hej', 'foo');      
+----------------------------------------------+
| ELT(if(1, 2, 3), 'ej', 'Heja', 'hej', 'foo') |
+----------------------------------------------+
| Heja                                         |
+----------------------------------------------+
1 row in set (0.00 sec)

      但是一看下面的函数,才明白不仅仅如此:

      FIELD(str,str1,str2,str3,...)

      返回值为str1, str2, str3,……列表中的str 指数。在找不到str 的情况下,返回值为 0 。

      如果所有对于FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数按照双倍进行比较。

      如果str 为NULL,则返回值为0 ,原因是NULL不能同任何值进行同等比较。FIELD() 是ELT()的补数。

以下是代码片段:

mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
        -> 2
mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
        -> 0

      这个函数与php中的array_search和array_key_exists、in_array、isset还是有相似作用的。

      再看一下下面这个,不禁拍案叫绝了,直接就是in子句了:

      FIND_IN_SET(str,strlist)

      假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。 

以下是代码片段:

mysql> SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2

      5:数字格式化函数

      FORMAT(X,D)

      将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。

以下是代码片段:

mysql> SELECT FORMAT(12332.123456, 4);
        -> '12,332.1235'
mysql> SELECT FORMAT(12332.1,4);
        -> '12,332.1000'
mysql> SELECT FORMAT(12332.2,0);
        -> '12,332'

      php中类似的函数是:number_format

展开全文  
收起全文  
MySQL的timestamp类型自动更新问题 (MySQL学习)
发布于 2008-09-12 20:23 阅读:77489 评论:1 标签: MySQL timestamp

    注:本文讨论的范围为未启用MAXDB模式的表!

    今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新。岂知对这个类型的值还不甚了解,导致出错。发现这个字段只是在这行数据建立的时候有值,在更新的却无变化。

    查找资料,发现是我建表的语句有问题:

以下是代码片段:

CREATE TABLE `test` (
  `t1` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `ww` varchar(5) NOT NULL
) ENGINE=MyISAM ;

    而实际上,以下两个建表语句的效果是一样的:

以下是代码片段:

CREATE TABLE `test` (
`t1` TIMESTAMP NOT NULL ,
`ww` VARCHAR( 5 ) NOT NULL
) ENGINE = MYISAM

CREATE TABLE `test` (
  `t1` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `ww` varchar(5) NOT NULL
) ENGINE=MyISAM ;

    比较之下,我的语句少了“on update CURRENT_TIMESTAMP”或多了“default CURRENT_TIMESTAMP”。如此一来,这个timestamp字段只是在数据insert的时间建立时间,而update时就不会有变化了。当然,如果你就是想达到这个目的倒也无所谓。

    查找英文手册(http://dev.mysql.com/doc/refman/5.1/en/timestamp.html),得到更详细的解说,翻译如下:

-----------------------------------翻译开始--------------------------------

    在CREATE TABLE语句中,第1个TIMESTAMP列可以用下面的任何一种方式声明:

    1: 如果定义时DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句都有,列值为默认使用当前的时间戳,并且自动更新。

    2: 如果不使用DEFAULT或ON UPDATE子句,那么它等同于DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

    3: 如果只有DEFAULT CURRENT_TIMESTAMP子句,而没有ON UPDATE子句,列值默认为当前时间戳但不自动更新。

    4: 如果没用DEFAULT子句,但有ON UPDATE CURRENT_TIMESTAMP子句,列默认为0并自动更新。

    5: 如果有一个常量值DEFAULT,该列会有一个默认值,而且不会自动初始化为当前时间戳。如果该列还有一个ON UPDATE CURRENT_TIMESTAMP子句,这个时间戳会自动更新,否则该列有一个默认的常量但不会自动更新。

    换句话说,你可以使用当前的时间戳去初始化值和自动更新,或者是其中之一,也可以都不是。(比如,你在定义的时候可以指定自动更新,但并不初始化。)下面的字段定义说明了这些情况:

以下是代码片段:

自动初始化和更新:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

只自动初始化:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

只自动更新
ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

只是给一个常量(注:0000-00-00 00:00:00)
ts TIMESTAMP DEFAULT 0

-----------------------------------翻译结束--------------------------------

    上面我用红色字体标出了"第1个TIMESTAMP列",这是因为,一个表有多个timestamp列的话,定义起来是不一样的。

    比如上面的第二条:“如果不使用DEFAULT或ON UPDATE子句,那么它等同于DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。”如果是第二个timestamp列就不一样了,请看:

以下是代码片段:

CREATE TABLE `test` (
`ww` VARCHAR( 9 ) NOT NULL ,
`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`t2` TIMESTAMP NOT NULL
) ENGINE = MYISAM

    这个情况下,数据插入时,t1会记录当前时间,t2为默认值(0000-00-00 00:00:00),等同下面的语句:

以下是代码片段:

CREATE TABLE  `test` (
`ww` VARCHAR( 9 ) NOT NULL ,
`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`t2` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE = MYISAM

    而根据上面的第二条,应该是:

以下是代码片段:

CREATE TABLE `test` (
`ww` VARCHAR( 9 ) NOT NULL ,
`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`t2` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM

    但实际上,上面的语句是个语法错误,mysql会返回:

以下是引用片段:

#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

    我曾经想这样设计一个表,这个表有两个timestamp列,一个可以记录更新时间,一个可以记录初始时间,但是尝试多次以后,我发现mysql好像做不到这一点,不知道这个是mysql的缺陷还是自我优化,因为,这个功能可以使用datetime实现记录初始化的时间,只是需要insert的时候指定一下。

    顺便说一下,官网上的MySQL中文手册好难看懂,翻译得太粗糙了。等偶过几天有空,把这一节翻译一下。

展开全文  
收起全文  
一场幽默剧和中国足球的希望 (随便说说)
发布于 2008-09-05 13:40 阅读:52794 评论:1 标签: 网店 足球

    自从2008年07月02日北京市工商局在它的官网上发布了《关于贯彻落实《北京市信息化促进条例》加强电子商务监督管理的意见》(外称“网店新规”)(http://www.baic.gov.cn/zwgk/xzgg/200807/t20080702_110070.html)后,幽默剧开始上演了。

    剧中,衙门不与时俱进的精神得到了淋漓尽致的体现。

    网店新规要求:从8月1日起北京营利性网店必须先取得营业执照后才能经营。此后引发各方批评,大意为“必然会增加众多个体网商的成本,可能会扼杀掉还处于婴儿期的中国个人电子商务”。

    以下新闻即为记录:

以下是引用片段:

易宝支付唐彬:网店新规不合时宜
http://tech.sina.com.cn/i/2008-07-31/1527753160.shtml

网店新规门槛高筑:专家呼吁缓行
http://tech.sina.com.cn/i/2008-08-01/01382364734.shtml

85.5%网民担心网店新规阻碍电子商务发展
http://tech.sina.com.cn/i/2008-08-01/07512365221.shtml

吕伯望:地方利益和中央利益不协调导致朝令夕改
http://www.itxinwen.com/view/new/html/2008-08/2008-08-27-88031.html

11名专家联合呼吁暂缓执行网店新规
http://tech.sina.com.cn/i/2008-07-31/13442363706.shtml

    众多新闻中,下面这一条吸引了眼球:

以下是引用片段:

网店执照:红色认证后的500元
http://tech.sina.com.cn/roll/2008-07-11/1029729340.shtml

    在此政府与民众意愿背道而驰的微妙时刻,有人撰写博文《名索网官商勾结公开抢钱?》:
http://blog.sina.com.cn/s/blog_48b6881601009piy.html

    里面指出:

以下是引用片段:

北京工商局为名索做广告:2008年7月2日,北京市工商局规定,从8月1日起电子商务经营者必须在网上公开企业注册真实信息。7月8日,北京市工商局有关人士告诉记者“北京工商目前已初步具备搜查网上无照黑店的技术,将发现一起、关闭一起”。北京市工商局所说的“搜查网上无照黑店”技术,来自一家名为华源润通(北京)科技有限公司提供的“名索验证”――国内工商企业信息查询系统(www.mingsuo.com)。

    博主在文中也给出了些许证据,以证事实。而我也找到了这个新闻:

以下是引用片段:

北京工商局:淘宝北京卖家必须办照---工商已具备网上查黑店技术
http://tech.sina.com.cn/i/2008-07-09/19062315481.shtml

    然后这个新闻是很有意思:

以下是引用片段:

网店新规500元强制性认证费被指子虚乌有
http://tech.sina.com.cn/i/2008-07-28/01352353422.shtml

    对于官商的联系,在我天朝上国隐晦自有一套,普通民众也奈何不了,但问题是,依法办证的过程也是艰巨的。不信?请看下面的新闻:

以下是引用片段:

规则藏暗礁:北京网店办证基本无望
http://tech.sina.com.cn/i/2008-08-29/10592422884.shtml

     事情越闹越烈,网商意识到做人还得靠自己。请看如下blog:

以下是引用片段:

小小网商就把堂堂工商吓成这个样子!
http://blog.sina.com.cn/s/blog_537fd7410100alou.html

    根据上面的博文,及后续的新闻跟进,可以基本看到如下的过程

    天涯论坛几百位网商的代表,“都市醉侠”与“窗花”、“影子”、“万家灯火”等6位被网友称为“网商六君子”的网商代表先是持着申请书来到比较近便的一个工商所(时间我没找到):北京市呼家楼工商管理所,他们得到的答复是:我们级别太低,无法答应接受递交这份材料。

    级别太低,也不能为难权利和责任不对称的人,那就去上一级吧。

    8月27日,在北京市朝阳区工商分局,他们得到的第一个答复是不耐烦地:他们不负责这件事,让6名网商代表去楼下听证科。在听证科他们得到的第二个答复是:工商局只是执行法规的机构,没权力和义务接受递交这份材料。至于转递上级主管部门,工商局表示:他们不能收下这份材料,得由6位网商代表亲自去市政府或者人大提交。

    最终,最幽默的剧情展开了!

    9月10日,6位网商代表去了北京市人大,北京市人大法制办工作人员在认真了解情况,并听取了六位代表的前两次“上书”经历后,当即表示:北京市人民代表大会制订《北京市信息化管理条例》,但网商们反映的问题,属于北京市工商局的执法问题。

    于是,北京市人大法制办建议六位网商代表去行政管理机构市政府递交《听证申请书》。

    很快,六位网商代表随即来到北京市政府,北京市政府信访办人员热情接待了她们。在认真了解情况后,北京市信访办人员真诚地告诉六位网商说:工商系统是一条独立的编制系统,北京市政府也缺乏对他们的约束能力,工商整个系统属于全国工商总局管理。

    最终,信访办人员建议说:要解决这个问题,最合理的办法是到法院提交行政诉讼。

    对于电子商务我不太了解,但我关心的是在这个过程中,政府部门做事的态度,很显然,让他们去踢足球,全国球迷都会看到中国足球的希望的。

    政府的做事态度,和中国足球一样,都需要“革命”。

    更多新闻请看:

以下是引用片段:

国家工商总局局长:网店新规将全国推广
http://tech.sina.com.cn/i/2008-07-18/10442336315.shtml

工商总局对网店新规将全国推广不知情
http://tech.sina.com.cn/i/2008-07-18/15532337102.shtml

杭州工商局称暂不跟进北京网店新规
http://tech.sina.com.cn/i/2008-07-22/18312343635.shtml

天津市不强推网店新规
http://tech.sina.com.cn/i/2008-07-29/14182358038.shtml

北京工商所称至今未开始查无照网店
http://tech.sina.com.cn/i/2008-08-25/09222411246.shtml

网店新规遭遇网商投诉:缘起与争议
http://tech.sina.com.cn/i/2008-09-02/08582428682.shtml

网商代表针对网店新规听证申请书披露
http://tech.sina.com.cn/i/2008-08-28/09192419757.shtml

小小网商就把堂堂工商吓成这个样子!
http://blog.sina.com.cn/s/blog_537fd7410100alou.html

网商申请针对网店新规听证遭拒
http://tech.sina.com.cn/i/2008-09-02/06212428146.shtml

网商申请听证网店新规遭拒拟诉工商局
http://tech.sina.com.cn/i/2008-09-02/14422429789.shtml

网商三请听证:北京政府建议诉讼工商
http://tech.sina.com.cn/i/2008-09-02/14232429747.shtml

网商为诉工商局暗中取证
http://tech.sina.com.cn/i/2008-09-05/01542436741.shtml


展开全文  
收起全文  
来自微软的蜘蛛或测试? (本站点滴)
发布于 2008-09-04 14:23 阅读:27570 评论:0 标签: 测试 微软 蜘蛛

    最近发现流量有点异常,比平常高了一些,令我甚感欣慰。不过查看了具体的流量来源才发现,异常就是异常。

    异常来自live.com,查看他的搜索词,发现都是一个英文单词,技术为主,具体可以看下面的链接,以下只是一部分。

以下是引用片段:

http://search.live.com/results.aspx?q=google
http://search.live.com/results.aspx?q=mysql
http://search.live.com/results.aspx?q=apache
http://search.live.com/results.aspx?q=phpxe
http://search.live.com/results.aspx?q=starbucks
http://search.live.com/results.aspx?q=jackchin
http://search.live.com/results.aspx?q=email
http://search.live.com/results.aspx?q=dehug

    而IP来自两个C网段:65.55.109/110,武林榜给出的地理位置是“美国Microsoft公司”,真是吓煞人啊。以下给出一部分:

以下是引用片段:

65.55.109.169
65.55.109.59
65.55.109.46
65.55.109.83
65.55.109.211
65.55.110.65
65.55.110.99
65.55.110.21
65.55.110.47
65.55.110.134

    莫非是微软的蜘蛛?可是又不像,因为进入来源页发现我的网站根本不在当前页面,有时可以往后翻几页可以看到,但有的却是始终不见踪影。

    莫非人家在是在做测试?据我的经验,开发完后自己做测试是最烦人的,祝福一下这些自己做测试的苦命人吧。

展开全文  
收起全文  
条件查询索引是相当有必要的 (MySQL学习)
发布于 2008-08-26 17:41 阅读:20079 评论:0 标签: mysql 索引

    记得一年半前去面试的时候,题目上有问如何优化题目上的数据库,大脑搜索不出任何东西。后来提示可以加索引,才恍然大悟。再过不久,立马为自己的无知而羞愧。

    前几天处理一个旧的程序,发现数据库给出的结果特别慢,查了一下表也不过30万左右数据量。一看数据结构,发现where子句中的字段没有索引,嘿嘿,立马解脱了......

以下是代码片段:

mysql> select count(*) from appeal ;
+----------+
| count(*) |
+----------+
|   317656 |
+----------+
1 row in set (0.00 sec)

mysql> alter table appeal add index (A_Flag);
Query OK, 317656 rows affected (7.95 sec)
Records: 317656  Duplicates: 0  Warnings: 0

    给现有的数据加索引的速度还是可以接受的,这个字段存储的值也就是个个位数的数字,类型是char(2),31万数据花了7.95秒。

展开全文  
收起全文  
MySQL控制流程函数学习 (MySQL学习)
发布于 2008-08-21 00:09 阅读:23387 评论:0 标签: MySQL 流程

    文章内容大量引用手册《12.2. 控制流程函数》。

    坦率的说,我甚至怀疑我即使精通这一节又有什么用?!在sql语句里面使用这个东西的话,貌似这个需求也太复杂了!

    废话不说,学习一下我不知道,甚至闻所未闻的语句:

    1:类似PHP中的switch(){case : ...}语句

    CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END

    CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

    在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。

    基本上可以认为是编程语言switch结构一个变体,然后又衍生出又一个变体。前者根据判断给定的值来确定流程走向,后者没有给定的值,而是根据不同的条件来确定流程。

    可以看看手册给出的例子:

   

以下是代码片段:

mysql> SELECT CASE 1 WHEN 1 THEN 'one'
        -> WHEN 2 THEN 'two' ELSE 'more' END;
        -> 'one'

mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
        -> 'true'

mysql> SELECT CASE BINARY 'B'
        -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
        -> NULL

    2:类似PHP的三元表达式

    IF(expr1,expr2,expr3)

    如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

    我们熟悉的三元表达式到mysql中就成这个小样了,原谅它吧,毕竟数据库的根本还是存储数据的。让我们瞧瞧它的小样:

以下是代码片段:

mysql> SELECT IF(1>2,2,3);
        -> 3

mysql> SELECT IF(1<2,'yes ','no');
        -> 'yes'

mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
        -> 'no'

    关于这个类三元表达式的返回值是个有趣的话题:

    “如果expr2 或expr3中只有一个明确是 NULL,则IF() 函数的结果类型为非NULL表达式的结果类型。”这句话不太好懂。 来看看下面这句:

    “expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。 ”还是看看例子比较好理解:

以下是代码片段:

mysql> SELECT IF(0.1,1,0);
        -> 0

mysql> SELECT IF(0.1<>0,1,0);
        -> 1

    在所示的第一个例子中,IF(0.1)的返回值为0,原因是 0.1 被转化为整数值,从而引起一个对 IF(0)的检验。这或许不是你想要的情况。在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。比较结果使用整数。 又是一个数学上的应用,如果你的数据库是和电子商城相关的,可就要注意了!

    IF() (这一点在其被储存到临时表时很重要 ) 的默认返回值类型按照以下方式计算:

以下是引用片段:

表达式

返回值

expr2 expr3 返回值为一个字符串。

字符串

expr2 expr3 返回值为一个浮点值。

浮点

expr2 expr3 返回值为一个整数。 

整数

    另外:“假如expr2 和expr3 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。”

    三元表达式在mysql里面会继续演变:

    3:IFNULL(expr1,expr2)

    假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

    如此看来又是三元表达式的变体了,只不过把三元剪成了二元的。可以理解为第一元同时又作为了第三元。

以下是代码片段:

mysql> SELECT IFNULL(1,0);
        -> 1

mysql> SELECT IFNULL(NULL,10);
        -> 10

mysql> SELECT IFNULL(1/0,10);
        -> 10

mysql> SELECT IFNULL(1/0,'yes');
        -> 'yes'

    同样 有返回值类型的问题:

    ULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。假设一个基于表达式的表的情况,  或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:

以下是代码片段:

CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;

    在这个例子中,测试列的类型为 CHAR(4)。

    4:NULLIF(expr1,expr2)

     看见了么,NULLIF和上面的IFNULL是孪生兄弟呢。

     如果expr1 = expr2  成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。  

以下是代码片段:

mysql> SELECT NULLIF(1,1);
        -> NULL

mysql> SELECT NULLIF(1,2);
        -> 1

    “注意,如果参数不相等,则 MySQL 两次求得的值为  expr1 。”这句话看得不明白。

    感觉这就乱了,说不定是mysql的开发者为了某个特定的需求胡乱想了一个出来!

    如果用三元表达式来套,就是NULLIF 为 NULL IF :

   

以下是代码片段:

if(exp1 == exp2)

    NULL ;//IF前面的NULL

else

    exp1;

展开全文  
收起全文  
MySQL操作符学习笔记 (MySQL学习)
发布于 2008-08-15 00:06 阅读:43902 评论:1 标签: MySQL 操作符

    发现许多mysql的基础知识掌握不是很牢固,手头一本《SQL必知必会》,就参照它,另外再自己做一些扩展学习吧。

    以下基本来源手册:第12章:函数和操作符。作为笔记而记录吧。

==========================================================

    除非在文档编制中对一个函数或操作符另有指定的情况外,一个包含NULL 的表达式通常产生一个NULL 值。

    在默认状态下, 在函数和紧随其后的括号之间不得存在空格。这能帮助  MySQL 分析程序区分一些同函数名相同的函数调用以及表或列。不过,函数自变量周围允许有空格出现。

    可以通过选择--sql-mode=IGNORE_SPACE来打开MySQL服务器的方法使服务器接受函数名后的空格。 个人客户端程序可通过选择mysql_real_connect()的CLIENT_IGNORE_SPACE 实现这一状态。在以上两种情况中, 所有的函数名都成为保留字。请参见5.3.2节,“SQL服务器模式”. 

    MySQL按照以下规则进行数值比较

以下是引用片段:
若有一个或两个参数为 NULL,除非NULL-safe <=> 等算符,则比较运算的结果为NULL。

若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。

若两个参数均为整数,则按照整数进行比较。 

十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。

假如参数中的一个为 TIMESTAMP 或 DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为 timestamp。这样做的目的是为了使ODBC的进行更加顺利。 注意,这不适合IN()中的参数!为了更加可靠,在进行对比时通常使用完整的 datetime/date/time字符串。

在其它情况下,参数作为浮点数进行比较。  

在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)。

为了进行比较,可使用CAST()函数将某个值转为另外一种类型。 使用CONVERT()将字符串值转为不同的字符集

    注意,在将一个字符串列同一个数字进行比较时, MySQL 不能使用列中的索引进行快速查找。假如str_col 是一个编入索引的字符串列,则在以下语句中,索引不能执行查找功能:

以下是代码片段:
SELECT * FROM tbl_name WHERE str_col=1;

    其原因是许多不同的字符串都可被转换为数值 1: '1'、 ' 1'、 '1a'、 ……

    以下记录一些我没见过或不熟悉的操作符:

    IS boolean_value IS NOT boolean_value

    根据一个布尔值来检验一个值,在这里,布尔值可以是TRUE、FALSE或UNKNOWN。

以下是代码片段:
mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
        -> 1, 1, 1
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
        -> 1, 1, 0

    IS NULL IS NOT NULL

    检验一个值是否为 NULL。

以下是代码片段:
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0, 0, 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
        -> 1, 1, 0

    为了能够顺利的使用ODBC 程序工作,在使用IS NULL时,MySQL支持一下额外特性:

    在一个值产生后,立即运行一个以下格式的语句,从而找到最新AUTO_INCREMENT 值的所在行:

以下是代码片段:
SELECT * FROM tbl_name WHERE auto_col IS NULL


    当设置SQL_AUTO_IS_NULL=0时,这项操作无法运行。请参见13.5.3节,“SET语法”。

   对于命名为NOT NULL 的DATE 和DATETIME列,可通过使用如下的 语句找到特定日期 '0000-00-00':

以下是代码片段:
SELECT * FROM tbl_name WHERE date_column IS NULL

    运行这一步需要使用一些 ODBC 应用软件,因为 ODBC本身不支持 一个 '0000-00-00'的时间值。 

    expr BETWEEN min AND max

    假如expr大于或等于 min 且expr 小于或等于max, 则BETWEEN 的返回值为1,或是0。若所有参数都是同一类型,则上述关系相当于表达式   (min <= expr AND expr <= max)。其它类型的转换根据本章开篇所述规律进行,且适用于3种参数中任意一种。 

以下是代码片段:
mysql> SELECT 1 BETWEEN 2 AND 3;
        -> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
        -> 0


    expr NOT BETWEEN min AND max

    这相当于NOT(expr BETWEEN min AND max)。

    COALESCE(value,...)

    返回值为列表当中的第一个非 NULL值,在没有非NULL 值得情况下返回值为 NULL 。

以下是代码片段:
mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL

    GREATEST(value1,value2,...)

    当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的规律同LEAST()相同。

以下是代码片段:
mysql> SELECT GREATEST(2,0);
        -> 2
mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);
        -> 767.0
mysql> SELECT GREATEST('B','A','C');
        -> 'C'


    在没有自变量为NULL的情况下,GREATEST()的返回值为NULL。

    ISNULL(expr)

    如expr 为NULL,那么ISNULL() 的返回值为 1,否则返回值为 0。

以下是代码片段:
mysql> SELECT ISNULL(1+1);
        -> 0
mysql> SELECT ISNULL(1/0);
        -> 1


    使用= 的NULL 值对比通常是错误的。

    ISNULL() 函数同 IS NULL比较操作符具有一些相同的特性。请参见有关IS NULL 的说明。

    INTERVAL(N,N1,N2,N3,...)

    假如N < N1,则返回值为0;假如N < N2 等等,则返回值为1;假如N 为NULL,则返回值为 -1 。所有的参数均按照整数处理。为了这个函数的正确运行,必须满足 N1 < N2 < N3 < ……< Nn 。其原因是使用了二分查找(极快速)。

以下是代码片段:
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
        -> 0

    LEAST(value1,value2,...)

    在有两个或多个参数的情况下, 返回值为最小 (最小值) 参数。用一下规则将自变量进行对比:
假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比较。

    假如返回值被用在一个 REAL语境中,或所有参数均为实值,则 将其作为实值进行比较。
假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。
在其它情况下,将参数作为区分大小写的字符串进行比较。

    假如任意一个自变量为NULL,则 LEAST()的返回值为NULL 。

以下是代码片段:
mysql> SELECT LEAST(2,0);
        -> 0
mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
        -> 3.0
mysql> SELECT LEAST('B','A','C');
        -> 'A'

    注意,上面的转换规则在一些边界情形中会产生一些奇特的结果:  

以下是代码片段:
mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);
        -> -9223372036854775808

    发生这种情况的原因是MySQL在整数语境中读取9223372036854775808.0。整数表示法不利于保存数值,因此它包括一个带符号整数。

展开全文  
收起全文  
让你的vim显示颜色 (Linux/Unix)
发布于 2008-08-06 23:22 阅读:54938 评论:0 标签: export linux term vim

    使用vim编辑你的程序,如php、c、c++程序,如果没有颜色,相信你会在linux下使用文本编辑程序而感到厌烦。

    这时可更改linux下的终端环境变量TERM,可以使用命令“env”查看TERM的值:

以下是代码片段:
[root@login testing]# env
......
TERM=vt100
......

    更改它的值为“linux”:

以下是代码片段:
[root@login testing]# export TERM=linux

    对于TERM的说法,我也不甚了解。不过你可以man一下看看。对于它可能的值,从网上一篇文章看到可以从这个目录下的文件看到:

以下是引用片段:
/usr/share/terminfo/v/v

    对于“export”,说明如下:

以下是引用片段:

export

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数
 -f  代表[变量名称]中为函数名称。
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
 -p  列出所有的shell赋予程序的环境变量。


展开全文  
收起全文  
PHP和MySQL的删除空白函数 (MySQL学习)
发布于 2008-08-05 10:41 阅读:24558 评论:0 标签: MySQL PHP trim

    作为黄金搭档,PHP和MySQL都有自己的删除空白函数,而且函数名字也一样:trim(), ltrim(), rtrim()。当然,作为编程语言,PHP删除空白函数更为强大。

    对 ltrim()和rtrim(),从其英语解释来看:

以下是引用片段:
PHP为:Strip whitespace (or other characters)
MySQL为:space characters removed

    显然,PHP还可以有“other characters”,而且PHP的函数还可以用第二个参数自定义要删除的字符。

    对“other characters”,手册解释为:

以下是引用片段:
  • " " (ASCII 32 (0x20)), an ordinary space.
  • "\t" (ASCII 9 (0x09)), a tab.
  • "\n" (ASCII 10 (0x0A)), a new line (line feed).
  • "\r" (ASCII 13 (0x0D)), a carriage return.
  • "\0" (ASCII 0 (0x00)), the NUL-byte.
  • "\x0B" (ASCII 11 (0x0B)), a vertical tab.
  •     不过,MySQL的trim()函数也增加了对其他字符的删除。具体请见下面从手册上摘抄的解释。

    = = = = = = = = = = = = = 方便阅读的分隔线  = = = = = = = = = = = = = = = =

        以下为MySQL的函数解释

        LTRIM(str) 

        Returns the string str with leading space characters removed.

    以下是代码片段:
    mysql> SELECT LTRIM('  barbar');
            -> 'barbar'


        This function is multi-byte safe.

        RTRIM(str)

        Returns the string str with trailing space characters removed.

    以下是代码片段:
    mysql> SELECT RTRIM('barbar   ');
            -> 'barbar'

        This function is multi-byte safe.

        TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

        Returns the string str with all remstr prefixes or suffixes removed. If none of the specifiers BOTH, LEADING, or TRAILING is given, BOTH is assumed. remstr is optional and, if not specified, spaces are removed.

    以下是代码片段:
    mysql> SELECT TRIM('  bar   ');
            -> 'bar'
    mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
            -> 'barxxx'
    mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
            -> 'bar'
    mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
            -> 'barx'

        This function is multi-byte safe.

        参考:
        php手册
        mysql中英文手册:
        http://dev.mysql.com/doc/refman/5.1/zh/functions.html
        http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_trim

    展开全文  
    收起全文