手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2024年11月的文章

Things的同步无效了

在电脑中辛苦的加了一些计划,发现手机上没有同步回来。再看了一下,上次同步时间已经是很久前了。
于是检查再检查,同时google了一下。终于发现一个小问题

1、things 的同步服务器是用GAE的。于是:http://code.google.com/status/appengine,这里面不正常的时候,你肯定会不正常

2、GAE经常被墙,最近斯巴达 勇士们在战斗了。所以GAE又抽风了。所以,你懂的。

3、肿么办?还 好我自备铝合金梯子,翻过了小墙。嗯,我会小心的,不会象某大学同学那样,在翻墙的时候摔倒,被刺破了XX。当初看到那张图时,我就不禁蛋疼了一下。

Tags: things

转:IT技术类博客的出路在哪?

看到这篇文章的时候,心下觉得,可以共享一下。毕竟,看到我们的博客的人往往也都是技术人员。再加上,我们这些人也都有一个博客,但是真正能够将博客运营好直到赢利的人毕竟是少数。
虽然我转载的文章并不一定就是对的,但作个参考也总是好的。
他举例的时候是拿36kr来举例的,是啊,真正能象36kr这样成功的博客有几个?光靠一两个人能成功吗?不现实啊,不科学啊大哥。
正如文中所写:

XML/HTML代码
  1. 最受欢迎的博客是一些业内有名气的人写的行业博客和生活博客,而后比较受欢迎的是电脑入门博客,例如介绍软件及其使用,解决电脑使用中的问题。这两年,比较受欢迎的是IT创业博客和图片类博客,图片类博客又包括美图、萌图、囧图、新闻图、故事图、时尚装扮(美女帅哥)图等等。  

那么,比较不受欢迎的博客是什么类型呢?

XML/HTML代码
  1. 而最可怜的则是纯粹技术博客,不单单国内,甚至国外的技术大亨的博客也很令人沮丧。javascript之父、jQuery之父、php先驱、linux皇帝....他们的博客确实有很多人访问,但是遗憾的是这种访问纯属需求性访问(下文会讲)或仰慕性访问,作为技术交流和学习的成分就比较少。国内的技术博客比较多,一方面是会建博客的起码懂点技术,另一方面技术容易出内容。而且涉及的技术领域也比较广泛,IT业内的技术就有很多领域,同时还包括了工业、农业、医学等其他技术博客。鸡虽大,蛋不多。技术博客的受众面窄,技术工作者本身又喜欢自己创造有价值的技术点,技术博客往往成为一个知识工具。  
  2.   
  3. 除开技术博客之外,SEO类、营销类、个人生活类博客,如果没有几年的博客年龄,很难有相对客观的流量。  

为什么?

XML/HTML代码
  1. 这要说到另一个点上,技术博客虽然含金量高,但不是书本,用户进入博客之后肯定会做的就是在读完全部内容之前离开博客,最主要的原因在于博客的信息发布形式和小说分章分节不同,而且博客产生的初衷就是以交流为目标,用户要学习技术,必须上有教学模式的网站,按照章节的方式学习,而非通过博客。这也印证了技术博客的工具性,如果技术圈够活跃够理想,那么博客交流形式还是不错的,然而目前没有一个良好的系统将这些技术博客集中起来。  

有出路吗?

XML/HTML代码
  1. 下面是IT技术博客的几点建议:   
  2.     1.更多的技术功能,让你的博客拥有实现各种功能的能力,例如在线提问解答,社会化评论,页面内的ajax效果,滑动等等,网民对网站的苛刻要求,让表现的更加完美的博客更受青睐。  
  3.     2.让界面更加舒服,不要让多余的东西阻碍了视野。在博客成为具有高流量的网站之前,尽量让博客显得有漂亮的外衣更重要,简洁清爽和个性漂亮是吸引人眼球的重要因素。这会让很多博主主动找你友链。  
  4.     3.认真对待你的访客和留言者,竭尽全力帮助需要帮助的人,获取他们的好感,得到受惠者的认同。  
  5.     4.认真的撰写你的博客文章,做更好的更有见地的分析,更准确的描述技术点,理论有出处,排版和段落等标准美观,对技术问题有更深层次的分析,不要把你的读者当做和你有相同水平的人,考虑初学者的阅读能力。  
  6.     5.个性的博主可以找到志同道合的朋友,无论文章内容或语言风格还是博客的设计,凸显个人的价值取向,性格鲜明,保持本色,这样能让博客鲜活客观。  
  7.     6.学点SEO,做好优化,交换友链,发布外链,逛逛论坛,看别人博客的时候记得留言。  

当然,尽信书则不如无书。根据自己的实际情况参考一下即可。上述的内容来自于:http://www.nowamagic.net/librarys/veda/detail/2110。其实还有一段,是讲某一老外的做站心得。这个确实就是可以考虑参考的了。因为其中有几段说的很实在,把上面那些空洞的东西实际的描绘了出来:

我的网站流量是如何从一个月37个访问者上升为一个月14,657个独立访问者的
  1. 我认为提升流量的最为有效的手段之一应该是树立目标 。我还记得刚刚建设起自己网站的那些天,每天面对寥寥无几的访问量,我记得我看着那个数字:37,然后默默的告诉自己:“这显然 还不够,我要让自己的网站产生巨大的流量。” 那个时候,每月10000的独立访问量,对我来说,简直是乌托邦。我想,世界上有数以千万计的网站,为什么会有人来访问我这个小 网站呢?但是我决定忘掉这个“为什么”的问题,并且要坚持自己的目标“月独立访问量超过1万”。我想,这就是第一堂课。不管你想去哪儿,除非你知道自己想要去的地方,不然你永远没法到达目的地。不要对“我是不是能到达呢?”或者“我怎么才能到达那里?” 念念不忘,你只需要首先决定你想去的地方,然后你肯定会找到到达那里的方法的。   

好吧,他的目标是什么,他做了什么?

XML/HTML代码
  1. 我经常浏览学习一些网站,比如problogger.net,我看到了一条在不同地方都出现过的建议:每天都要更新你的网站。 这条建议让我觉得自己能够做到(因为平常我很喜欢写点东西),我觉得“每天”这个词,会让我的网站变得与众不同:因为有些游戏网站一周更新几次甚至一个月才更新几次。有些人建议每天更新好几次网站,但是我却决定要坚持每天更新一篇文章。到现在为止,我感觉尚可。我觉得,如果你不喜欢写作的话,每天更新文章是没有意义的。你要喜欢做才能去做,不然的话,人们会看出来你在作秀或者你并不是真的喜欢去做。不管怎样,我认为,保持网站的新鲜度——每天都更新——是提升流量的最重要因素。   

正如作者所说,你要喜欢,你才能去做,否则,你仅仅是在作秀。。。
这段内容或者对你也有借鉴。你看:

XML/HTML代码
  1. 采访: 这是另外一个获得访问量的捷径。我曾经对一些非常知名的游戏公司做过一些采访(而且我正在做更多的)。因为这种东西,要比“普通的文章”更能吸引人,所以很多网站都转载或者链接了我的网站内容。大网站也比较喜欢关注有采访内容的东西。假设你的网站是关于市场的吧。你能让一些市场专家接受你的采访吗?我相信如果你能够简洁的解释你的网站是啥,你的网站流量多大,并且你的采访内容对第三方有多好的影响,总会有人乐于接受你的采访的。你也可以为接受采访者提供一些实在的东西(比如每月的链接,banner条广告或者给那些能够让某些大人物接受采访的哥们一些现金报酬)。我从来没有给做过链接,或者广告甚至现金报酬,因为我知道总有人会非常乐意接受你的采访。虽然也有人拒绝我的采访,但是我经常接受一些游戏公司市场部门朋友们的采访。当你能够成功采访一家大公司的高层人物后,以后的采访就会相对容易了(你可以在请求采访的时候提起“我上次采访了X公司的CEO,相关内容请点击这个链接。。 。”)——这就好像一封推荐信一样。   

试想,如果你真的采访到了红衣教主,你还能不红?虽然可能只是暂时,但毕竟也有一小段可以炫耀的资本(对于一个小网站来说)

XML/HTML代码
  1. 这里还有其它一些小技巧和经验。我觉得最好不要让网站变得广告满天飞 ,因为这样会让访问者产生一种抗拒的心理。有些人会“自私的”这样想“既然你放了这么多广告在你网站上,肯定能赚到很多钱,但是我就是不告诉别人你的网址,看你怎么办。。。” 另外一个可能会有帮助的经验是我成立了一家公司。其实成立公司只是为了让你的网站或者你的名字看起来正规一些,因为很多人对“某 公司董事长”和“某个做网站的家伙”的看法是完全不一样的。   

好吧,我承认我的网站上广告很多,有时候,这真是一个让人郁闷的事情,没广告吧,没有收入;没有收入吧,难以维护网站;这种双刃剑有时候真的很让人为难。所以我有时候也在想,是不是就干脆什么都没有,来一个干干净净的站?这样的话,速度也是最快。因为不需要加载各种杂七杂八的JS了。不是吗?
这个老外站长最后补充了一下:

http://www.nowamagic.net/librarys/veda/detail/1975
  1. 最后我还是想总结一下,成功的最重要的两点:提供有价值的东西,以及设立自己的目标。独一无二的内容,像收入数据、采访、你自己的原创文章、你在其它论坛或者报纸发表的内容等,会对你做网站大有帮助。  

独一无二,这就说明了你是在用心在做。我还是相对,弱爆了。

xcache 发布3.0版本

xcache也开始追求版本号了?
1.x的时候几年都没变。2.01刚发布3个月立刻就是3.0了?
虽然官网上说这是一个里程碑式的更新,但谁能说的清?

更新倒是不少:

API Changes
========
 * chg: proto array xcache_clear_cache(int type, [ int id = -1 ]). -1 means all cache splits
 * new: proto array xcache_enable_cache(int type, [ int id = -1, [ bool enable = true ] ])
 * new: proto array xcache_admin_namespace()
 * new: proto array xcache_set_namespace(string namespace)

Ini Settings Changes
========
 * new: xcache.disable_on_crash = Off
 * new: xcache.coverager_autostart = On
 * new: xcache.allocator = bestfit (no other option value yet)
 * new: xcache.var_allocator = bestfit (no other option value yet)

ChangeLog
========
 * closes #2: auto disable caching on crash
 * closes #73: warn for improper PHP_FCGI_CHILDREN setting fcgi mode (>=PHP_5_3)
 * closes #174: updates api to support "clear all cache"
 * closes #198: support for caching protocol url
 * closes #287: namespace support
 * fixes #39: ini_set never work for xcache.coverager setting. use API instead
 * code refactor
   * uses extension= to load XCache. loading via zend_extension= is unsupported
   * split XCache features into multiple sub modules
 * updates XCache admin page
 * adds an diagnosis module to give professional advise, accessable via htdocs pages
 * cache can be enabled/disabled manually

反正,他们自我评价挺高的:XCache 3.0.0 released. Lots of improvements, bug fixes. This is a big new milestone refactoring most XCache code.

在首页的下载里面还写着:
2.1.x, unstable, devel, features
结果,3.0都Release了。。。
这年头。。。还能怎么办?

Tags: xcache

程序猿,你孤单吗?

以前有一首歌,你快乐吗?我很快乐。那么码农码畜们,你快乐吗?
当然快乐这东西不是一句两句可以说的清的,但是,你孤单吗?看到伯乐在线的这篇:孤独的程序员,你本应该更幸福?
原文好象是来自:英文原文:TheNextWeb,编译:tech2ipo
原文太长,我觉得意义不大。。转一点有意思的话:

她提到了作为大学新生之孤独;而在其孤独至深时,看到Facebook上朋友不断分享着各自的开心事的时候,此种孤独更是被无限放大。“当你感到孤单时,”Page说:“本以为有一种方式可以减轻孤单感的,但事实这种方式却招致了恰恰相反的效果——它就是社交网络。
----正如我们平时说的,天天上QQ没空出去约会的人,你孤独吗?

选择了程序员作为职业,也就意味着“娶了/嫁给了”自己的手提电脑。社交活动会远远地排在第二、第三位;
-----悲催。。。

你看,老外其实说的很明白:
“按理,如果程序员本身带有点内向性格的话,相对于其他同职业者,我们肯定有理由相信前者更容易感到孤单,”英国伦敦政治经济学院社会政策系Paul Dolan教授的助理Elizabeth Plank解释说:“但是,(我们的研究还发现)有两种人群——孤单的人以及经受着社会焦虑的人,他们更容易在互联网上表达真我;因而相对现实社会,他们在网上论坛上更容易与他人建立满足自身要求的关系。

难道这又是产品与技术之间的冲突:??
程序员之所以被认为是不爱交际的原因,还有一点,就是他们需要用大量的个人时间用于学习新技术,专攻自己的项目,”在伦敦工作的合同程序员Samuel Molinari解释说。“相对于那些不懂‘互联网文化’而瞎指挥的‘善交际’的项目经理(他们不但搞到网页开发人员相当郁闷,而且他们有时的决策真是不敢恭维),还不如让一个内向的来领队呢?”

好吧。。这是多么让人郁闷的事情:

我的工作流程就像下面那样。
1. 写代码;
2. 运行代码;
3. 得到错误提示;
4. 找出错误,然后返回第1步。
日复一日,年复一年,我都是这样做。对于自己创作的东西,老是去寻找毛病,从没思考过这样做的好处。这是一种加强消极否定的反馈回路。”

----在这种情况下,发生了什么?

无论是何种应用程序,每个搞开发的,都可以在不到一周的时间内搞定;但是,给到客户的将会是一件垃圾废物。在这行业,此情况经常发生。公司为了取悦客户,低估了开发应用程序所需的时间,导致程序员压力超级大,不断加班,周末也都得赶工。程序员处于如此匆忙的状态中,他们根本无法创作出优质程序。所以产品会有很多的错误和漏洞,客户自然不高兴了,然后又施以程序员更多的工作。”

“知道我想说什么吧?——也就是这样,程序员最终陷入了恶性循环。

----------
但是,是不是说程序员创业后就会好一点呢?因为他会开始与外面进行交际?其实也不尽然:

5 Star Lives总经理Phil Peters说,尽管“程序员容易的抑郁症”是被过分夸大的,“但此说法的来源根据还是可以轻而易见的”:

1. 客户不能理解程序员所会碰到的问题,所以导致期望过高(有些期望根本无法实现);
2. 在社会经济条件不足的情况下,不断对团队和个人施加要求,以图能与外包团队的水平相比;
3. 不断依赖第三方内容(开发架构、函数库、模块等等),保持令人满意的创新步伐——这是一种无尽的挑战。

其实,真正能做到客户和下属满意的人才是真正有能力的人,怎么样协调甲乙双方的需求,达到一个比较合理的程度,这,我做不到。。你或许可以。

sqlite字段类型

改了点东西,因为想着要把项目优化,但是每条数据如果都存到单一数据库中,会造成以后的数据越来越大,怎么办?于是我想到了,可以考虑将单类数据存储到sqlite中,既可以备份,又可以用作缓存和其他作用。

所以就想到了sqlite的一些特性,当然,花了大量的时间测试代码,即,一份代码自动生成不同的数据库,可以自由控制读取哪个库哪个表。基于YII而已。写的有点挫,但现在这样的好处是可以不改动原有任何一行代码。

OK,接着转sqlite的字段类型。

一、存储种类和数据类型:

    SQLite将数据值的存储划分为以下几种存储类型:
     NULL: 表示该值为NULL值。
     INTEGER: 无符号整型值。
     REAL: 浮点值。
     TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。
     BLOB: 存储Blob数据,该类型数据和输入数据完全相同。
    由于SQLite采用的是动态数据类型,而其他传统的关系型数据库使用的是静态数据类型,即字段可以存储的数据类型是在表声明时即以确定的,因此它们之间 在数据存储方面还是存在着很大的差异。在SQLite中,存储分类和数据类型也有一定的差别,如INTEGER存储类别可以包含6种不同长度的 Integer数据类型,然而这些INTEGER数据一旦被读入到内存后,SQLite会将其全部视为占用8个字节无符号整型。因此对于SQLite而 言,即使在表声明中明确了字段类型,我们仍然可以在该字段中存储其它类型的数据。然而需要特别说明的是,尽管SQLite为我们提供了这种方便,但是一旦 考虑到数据库平台的可移植性问题,我们在实际的开发中还是应该尽可能的保证数据类型的存储和声明的一致性。除非你有极为充分的理由,同时又不再考虑数据库 平台的移植问题,在此种情况下确实可以使用SQLite提供的此种特征。
   1. 布尔数据类型:
    SQLite并没有提供专门的布尔存储类型,取而代之的是存储整型1表示true,0表示false。

   2. 日期和时间数据类型:
    和布尔类型一样,SQLite也同样没有提供专门的日期时间存储类型,而是以TEXT、REAL和INTEGER类型分别不同的格式表示该类型,如:
    TEXT: "YYYY-MM-DD HH:MM:SS.SSS"
    REAL: 以Julian日期格式存储
    INTEGER: 以Unix时间形式保存数据值,即从1970-01-01 00:00:00到当前时间所流经的秒数。

二、类型亲缘性:

    为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了"类型亲缘性(Type Affinity)"的概念。我们可以这样理解"类型亲缘性 ",在表字段被声明之后,SQLite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储 方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样SQLite才会考虑其它更适合该值的类型存储该值。SQLite目前的版本支持以下五种 亲缘类型:

亲缘类型 描述  
TEXT 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。
NUMERIC 当文本数据被插入到亲缘性为NUMERIC的 字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失 败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储 该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite 就会将其转换为INTEGER的存储方式。
INTEGER 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。
REAL 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。
NONE 不做任何的转换,直接以该数据所属的数据类型进行存储。  

   1. 决定字段亲缘性的规则:
    字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表。需要注意的是以下列表的顺序,即如果某一字段类型同时符合两种亲缘性,那么排在前面的规则将先产生作用。
    1). 如果类型字符串中包含"INT",那么该字段的亲缘类型是INTEGER。
    2). 如果类型字符串中包含"CHAR"、"CLOB"或"TEXT",那么该字段的亲缘类型是TEXT,如VARCHAR。
    3). 如果类型字符串中包含"BLOB",那么该字段的亲缘类型是NONE。
    4). 如果类型字符串中包含"REAL"、"FLOA"或"DOUB",那么该字段的亲缘类型是REAL。
    5). 其余情况下,字段的亲缘类型为NUMERIC。

    2. 具体示例:

声明类型 亲缘类型 应用规则
INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
INTEGER 1
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT 2
BLOB NONE 3
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
REAL 4
NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME
NUMERIC 5

    注:在SQLite中,类型VARCHAR(255)的长度信息255没有任何实际意义,仅仅是为了保证与其它数据库的声明一致性。

三、比较表达式:

    在SQLite3中支持的比较表达式有:"=", "==", "<", "<=", ">", ">=", "!=", "<>", "IN", "NOT IN", "BETWEEN", "IS" and "IS NOT"。
    数据的比较结果主要依赖于操作数的存储方式,其规则为:
    1). 存储方式为NULL的数值小于其它存储类型的值。
    2). 存储方式为INTEGER和REAL的数值小于TEXT或BLOB类型的值,如果同为INTEGER或REAL,则基于数值规则进行比较。
    3). 存储方式为TEXT的数值小于BLOB类型的值,如果同为TEXT,则基于文本规则(ASCII值)进行比较。
    4). 如果是两个BLOB类型的数值进行比较,其结果为C运行时函数memcmp()的结果。

四、操作符:

    所有的数学操作符(+, -, *, /, %, <<, >>, &, and |)在执行之前都会先将操作数转换为NUMERIC存储类型,即使在转换过程中可能会造成数据信息的丢失。此外,如果其中一个操作数为NULL,那么它们 的结果亦为NULL。在数学操作符中,如果其中一个操作数看上去并不像数值类型,那么它们结果为0或0.0。

-------

上面的这一小段来自:http://www.cnblogs.com/stephen-liu74/archive/2012/02/22/2325258.html,其实这里也有一份,不过这一份嘛 ,就整理的不太好了。所以我扔到code框里。。其实以前有一份pdf的,但一下子找不到了。而且。。。mac下看chm和pdf都不太爽。。

http://www.21andy.com/blog/20091211/1489.html
  1. NULL  
  2. INTEGER  
  3. REAL  
  4. TEXT  
  5. BLOB  
  6. 但实际上,sqlite3也接受如下的数据类型:  
  7. smallint 16 位元的整数。  
  8. interger 32 位元的整数。  
  9. decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5s=0 。  
  10. float   32位元的实数。  
  11. double   64位元的实数。  
  12. char(n)   n 长度的字串,n不能超过 254。  
  13. varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。  
  14. graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。  
  15. vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000  
  16. date   包含了 年份、月份、日期。  
  17. time   包含了 小时、分钟、秒。  
  18. timestamp 包含了 年、月、日、时、分、秒、千分之一秒。  
  19.   
  20.    
  21.   
  22. 1.存储类别  
  23. 第二版把所有列的值都存储成ASCII文本格式。第三版则可以把数据存储成整数和实数,还可以存储BLOB数据.  
  24.   
  25. Each value stored in an SQLite数据库中存储的每个值都有一个属性,都属于下面所列类中的一种,(被数据库引擎所控制)  
  26.   
  27. 空.这个值为空值  
  28.   
  29. 整数.值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.  
  30.   
  31. 实数. 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.  
  32.   
  33. 文本. 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).  
  34.   
  35. BLOB. 值是BLOB数据,如何输入就如何存储,不改变格式.  
  36.   
  37. 像SQLite2.0版一样,在3.0版中,除了INTEGER PRIMARY KEY,数据库中的任何列都可以存储任何类型的数据.这一规则也有例外,在下面的"严格相似模式"中将描述.  
  38.   
  39. 输入SQLite的所有值,不管它是嵌入 SQL语句中的文字还是提前编译好的绑定在SQL语句中的值,在SQL语句执行前都被存储为一个类.在下面所描述的情况下,数据库引擎将在执行时检查并把值在数字存储类(整数和实数)和文本类间转换.  
  40.   
  41. 存储的类别最初被分类为如下:  
  42.   
  43. 具体的值比如SQL语句部分的带双引号或单引号的文字被定义为文本,如果文字没带引号并没有小数点或指数则被定义为整数,如果文字没带引号但有小数点或指数则被定义为实数,如果值是空则被定义为空值.BLOB数据使用符号X'ABCD'来标识.  
  44.   
  45. Values supplied using the 被输入的值使用sqlite3_bind_* APIs的被分类一个存储等级,这等级是和原来的类基本相一致的. (比如sqlite3_bind_blob()绑定一个BLOB的值).  
  46.   
  47. 值的分类是SQL分等级操作的结果,决定于最远的操作表达式.用户定义的功能也许会把值返回任意的类.在编译的时候来确定表达式的存储类基本是不可能的.  
  48.   
  49. 2. 列之间的亲和性  
  50. 在SQLite3.0版中,值被定义为什么类型只和值自身有关,和列没有关系,和变量也没有关系. (这有时被称作 弱类型.)所有其它的我们所使用的数据库引擎都受静态类型系统的限制,其中的所有值的类是由其所属列的属性决定的,而和值无关.  
  51.   
  52. 为了最大限度的增加SQLite数据库和其他数据库的兼容性,SQLite支持列的"类型亲和性". 列的亲和性是为该列所存储的数据建议一个类型.我们要注意是建议而不是强迫.在理论上来讲,任何列依然是可以存储任何类型的数据的. 只是针对某些列,如果给建议类型的话,数据库将按所建议的类型存储.这个被优先使用的数据类型则被称为"亲和类型".  
  53.   
  54. 在SQLite3.0版中,数据库中的每一列都被定义为以下亲和类型中的一种:  
  55.   
  56. 文本  
  57. 数字的  
  58. 整数  
  59. 无  
  60. 一个具有类型亲和性的列按照无类型,文本,或BLOB存储所有的数据.如果数字数据被插入一个具有文本类型亲和性的列,在存储之前数字将被转换成文本.  
  61.   
  62. 一个具有数字类型亲和性的列也许使用所有的五个存储类型存储值.当文本数据被插入一个数字列时,在存储之前,数据库将尝试着把文本转换成整数或实数.如果能成功转换的话,值将按证书活实数的类型被存储. 如果不能 成功转换的话,值则只能按文本类型存储了,而不会被转换成无类型或BLOB类型来存储.  
  63.   
  64. 一个具有整数亲和力的列在转换方面和具有数字亲和力的列是一样的,但也有些区别 ,比如没有浮动量的实值(文本值转换的值)被插入具有整数亲和力的列时,它将被转换成整数并按整数类型存储.  
  65.   
  66. 一个具有无类型亲和力的列不会优先选择使用哪个类型.在数据被输入前它不会强迫数据转换类型.  
  67.   
  68. 2.1 列的亲和性的决定  
  69. 一个列的亲和类型是由该列所宣称的类型决定的.遵守以下规则:  
  70.   
  71. 如果数据类型包括字符串"INT"那么它被定义成具有整数亲和性.  
  72.   
  73. 如果列中的数据类型包括以下任何的字符串 "CHAR", "CLOB", or "TEXT" 那么这个列则具有文本亲和性.要注意VARCHAR类型包括字符串"CHAR"因此也具有文本类型亲和性.  
  74.   
  75. 如果一个列的数据类型包括字符串"BLOB"或者如果数据类型被具体化了,那么这个列具有无类型亲和性.  
  76.   
  77. 否则就具有数字类型亲和性.  
  78.   
  79. 如果表格使用If "CREATE TABLE AS SELECT..."语句生成的,那么所有的列则都没有具体的数据类型,则没有类型亲和性.  
  80.   
  81. 2.2 列的亲和性的例子  
  82. CREATE TABLE t1(  
  83.     t TEXT,  
  84.     nu NUMERIC,  
  85.     i INTEGER,  
  86.     no BLOB  
  87. );  
  88.   
  89. -- Storage classes for the following row:  
  90. -- TEXT, REAL, INTEGER, TEXT  
  91. INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0');  
  92.   
  93. -- Storage classes for the following row:  
  94. -- TEXT, REAL, INTEGER, REAL  
  95. INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0);  
  96.   
  97. 3.比较表达式  
  98. 像SQLite2.0版一样,3.0版的一个特性是二进制比较符'=', '<', '<=', '>=' and '!=',一个操作'IN'可以测试固定的成员资格, 三重的比较操作符'BETWEEN'.  
  99.   
  100. 比较的结果决定于被比较的两个值的存储类型。遵循以下规则:  
  101.   
  102. 一个具有空存储类型的值被认为小于任何值(包括另外一个具有空存储类型的值)。  
  103.   
  104. 一个整数值或实数值小于任何文本值和BLOB值。 当一个整数或实数和另一个整数或实数相比较的时候,则按照实际数值来比较。  
  105.   
  106. 一个文本值小于BLOB值。当两个文本值相比较的时候,则用C语言类库中的memcmp()函数来比较。然而,有时候也不是这样的,比如在下面所描述的“用户定义的整理顺序”情况下。  
  107.   
  108. 当两个BLOB文本被比较的时候,结果决定于memcmp()函数。  
  109.   
  110. 在开始比较前,SQLite尝试着把值在数字存储级(整数和实数)和文本之间相互转换。下面列举了关于如何比较二进制值的例子。在着重号below中使用的表达式可以表示SQL标量表达式或是文本但不是一个列值。  
  111.   
  112. 当一个列值被比拟为表达式结果的时候,在比较开始前,列的亲和性将被应用在表达结果中。  
  113.   
  114. 当两个列值比较的时候,如果一个列有整数或数字亲和性的时候,而另外一列却没有,那么数字亲和性适用于从非数字列提取的任何具有文本存储类型的值. P>  
  115.   
  116. 当比较两个表达式的结果时,不发生任何转换,直接比较结果.如果一个字符串和一个数字比较, 数字总是小于字符串.  
  117.   
  118. 在SQLite中, 表达式"a BETWEEN b AND c"等于表达式 "a >= b AND a <= c",在比较表达式时,a可以是具有任何亲和性.  
  119.   
  120. 表达式 "a IN (SELECT b ....)" 在比较时遵循上面所提到的三条规则,是二进制比较.(例如, 在一个相似的样式 "a = b"). 例如,如果'b'是一个列值, 'a' 是一个表达式,那么,在开始比较前,'b'的亲和性就被转换为'a'的亲和性了.  
  121.   
  122. SQLite把表达式 "a IN (x, y, z)" 和 "a = z OR a = y OR a = z"视为相等.  
  123.   
  124. 3.1 比较例子  
  125. CREATE TABLE t1(  
  126.     a TEXT,  
  127.     b NUMERIC,  
  128.     c BLOB  
  129. );  
  130.   
  131. -- Storage classes for the following row:  
  132. -- TEXT, REAL, TEXT  
  133. INSERT INTO t1 VALUES('500', '500', '500');  
  134.   
  135. -- 60 and 40 are converted to '60' and '40' and values are compared as TEXT.  
  136. SELECT a < 60, a < 40 FROM t1;  
  137. 1|0  
  138.   
  139. -- Comparisons are numeric. No conversions are required.  
  140. SELECT b < 60, b < 600 FROM t1;  
  141. 0|1  
  142.   
  143. -- Both 60 and 600 (storage class NUMERIC) are less than '500'  
  144. -- (storage class TEXT).  
  145. SELECT c < 60, c < 600 FROM t1;  
  146. 0|0  
  147.   
  148. 4. 运算符  
  149. 所有的数学运算符(所有的运算符而不是连锁作用标记符"||")运算对象首先具有数字亲和性, 如果一个或是两个都不能被转换为数字那么操作的结果将是空值。  
  150.   
  151. 对于连接作用操作符,所有操作符将首先具有文本亲和性。如果其中任何一个操作符不能被转换为文本(因为它是空值或是BLOB)连接作用操作符将是空值。  
  152.   
  153. 5. 分类,排序,混合挑选  
  154. 当用子句ORDER挑选值时,空值首先被挑选出来, 然后是整数和实数按顺序被挑选出来, 然后是文本值按memcmp()顺序被挑选出来, 最后是BLOB值按memcmp()顺序被挑选出来.在挑选之前, 没有存储类型的值都被转换了.  
  155.   
  156. When grouping values with the 当用GROUP BY子句给值分组时,具有不同存储类型的值被认为是不同的, 但也有例外, 比如,一个整数值和一个实数值从数字角度来说是相等的,那么它们则是相等的.用GROUP by 子句比较完后,值不具有任何亲和性.  
  157.   
  158. 混合挑选操作符UNION, INTERSECT and EXCEPT 在值之间实行绝对的比较,同样的亲和性将被应用于所有的值,这些值将被存储在一个单独的具有混合SELECT的结果组的列中. 被赋予的亲和性是该列的亲和性,这个亲和性是由剩下的大部分的混合SELECTS返回的,这些混合SELECTS在那个位置上有列值(而不是其它类型的表达式). 如果一个给定的混合SELECT列没有SELECTS的量, 那么在比较前,该列的值将不具有任何亲和性.  
  159.   
  160. 6. 其它亲和性模式  
  161. 以上的部分所描述的都是数据库引擎在正常亲和性模式下所进行的操作, SQLite将描述其它两种亲和性模式,如下:  
  162.   
  163. 严格亲和性模式.在这种模式下,如果需要值之间相互转换数据存储类型的话,数据库引擎将发送错误报告,当前语句也将会重新运行.  
  164.   
  165. 无亲和性模式.在这种模式下,值的数据存储类型不发生转换.具有不同存储类型的值之间不能比较,但整数和实数之间可以比较.  
  166.   
  167. 7.用户定义的校对顺序  
  168. By default, when 当SQLite比较两个文本值的时候,通过系统设定,不管字符串的编码是什么,用memcmp()来比较. SQLite第三版允许用户提供任意的函数来代替memcmp(),也就是用户定义的比较顺序.  
  169.   
  170. 除了系统预设的BINARY比较顺序,它是用memcmp()函数比较,SQLite还包含了两个额外的内置比较顺序函数, NOCASE和REVERSE:  
  171.   
  172. BINARY -使用memcmp()比较字符串数据, 不考虑文本编码.  
  173. REVERSE -用倒序比较二进制文本.  
  174. NOCASE - 和二进制一样,但在比较之前,26位的大写字母盘要被折合成相应的小写字母盘.  
  175. 7.1 分配比较顺序  
  176. 每个表格中的每个列都有一个预设的比较类型.如果一个比较类型不是二进制所要求的,比较的子句将被具体化为 列的定义 来定义该列.  
  177.   
  178. 当用SQLite比较两个文本值时,比较顺序将按照以下的规则来决定比较的结果.文档的第三部分和第五部分描述在何种场合下发生这种比较.  
  179.   
  180. 对于二进制比较符(=, <><= and >=),如果每个操作数是一列的话,那么该列的默认比较类型决定于所使用的比较顺序. 如果两个操作数都是列的话,那么左边的操作数的比较类型决定了所要使用的比较顺序.如果两个操作数都不是一列,将使用二进制来比较.  
  181.   
  182. 表达式"x BETWEEN y and z"和 "x >= y AND x <= z"是相同的. 表达式"x IN (SELECT y ...)" 和表达式 "xx = y" 使用同样的方法来操作,这是为了决定所要使用的比较顺序.如果X是一列或者二进制的,则"x IN (y, z ...)" 形式的表达式所使用的比较顺序是X的默认的比较类型.  
  183.   
  184. ORDER BY clause that is part of a SELECT statement may be assigned a collation sequence to be used for the sort operation explicitly. In this case the explicit collation sequence is always used. Otherwise, if the expression sorted by an ORDER BY clause is a column, then the default collation type of the column is used to determine sort order. If the expression is not a column, then the BINARY collation sequence is used.  
  185.   
  186. 7.2 比较顺序的例子  
  187. 下面的例子介绍了The examples below identify the collation sequences that would be used to determine the results of text comparisons that may be performed by various SQL statements. Note that a text comparison may not be required, and no collation sequence used, in the case of numeric, blob or NULL values.  
  188.   
  189. CREATE TABLE t1(  
  190.     a,                 -- default collation type BINARY  
  191.     b COLLATE BINARY, -- default collation type BINARY  
  192.     c COLLATE REVERSE, -- default collation type REVERSE  
  193.     d COLLATE NOCASE   -- default collation type NOCASE  
  194. );  
  195.   
  196. -- Text comparison is performed using the BINARY collation sequence.  
  197. SELECT (a = b) FROM t1;  
  198.   
  199. -- Text comparison is performed using the NOCASE collation sequence.  
  200. SELECT (d = a) FROM t1;  
  201.   
  202. -- Text comparison is performed using the BINARY collation sequence.  
  203. SELECT (a = d) FROM t1;  
  204.   
  205. -- Text comparison is performed using the REVERSE collation sequence.  
  206. SELECT ('abc' = c) FROM t1;  
  207.   
  208. -- Text comparison is performed using the REVERSE collation sequence.  
  209. SELECT (c = 'abc') FROM t1;  
  210.   
  211. -- Grouping is performed using the NOCASE collation sequence (i.e. values  
  212. -- 'abc' and 'ABC' are placed in the same group).  
  213. SELECT count(*) GROUP BY d FROM t1;  
  214.   
  215. -- Grouping is performed using the BINARY collation sequence.  
  216. SELECT count(*) GROUP BY (d || '') FROM t1;  
  217.   
  218. -- Sorting is performed using the REVERSE collation sequence.  
  219. SELECT * FROM t1 ORDER BY c;  
  220.   
  221. -- Sorting is performed using the BINARY collation sequence.  
  222. SELECT * FROM t1 ORDER BY (c || '');  
  223.   
  224. -- Sorting is performed using the NOCASE collation sequence.  
  225. SELECT * FROM t1 ORDER BY c COLLATE NOCASE;  
code框里的就随便看看吧。毕竟与mysql还是有点区别的。由于sqlite也是可以被下载的,所以最好是换个名字存储或者名字随机,这样别人就不容易猜了。sqlite做项目的好处是,你可以用dropbox随时备份整个项目,毕竟,sqlite只是一个文件。。。轻轻松松啊