跳舞的小人
这是来自《福尔摩斯探案集》里面跳舞的小人图案,可能在你看来就是一些图案,但在福尔摩斯的眼里这是英文符号,对应表格:
SQL中的类型
用固定的解释方案,得到的解释结果也是类似的。比如在福尔摩斯眼中,跳舞的小人总是一些英文字母。所以解释方案会使得解释结果是相似的,是一类的。所以也把解释方案叫做类型。
计算机是用0和1来存储数据的。那么对于计算机来讲,一串0和1,无异于一串跳舞的小人,其含义完全取决于解释的方案,也就是数据的类型。
SQL里面有几种常见类型:
- INTEGER: 表示把这一段01串解释为整数,所以你总是会得到一个整数
- VARCHAR: 表示把这一段01串解释为文本(VARCHAR,Variable Character,变长字符串),所以你总是会得到一个文本
- TIMESTAMP: 表示把这一段01串解释为时间戳(具体什么是时间戳,后续展开),所以你总是会得到一个日期
- FLOAT: 表示把这一段01串解释为浮点数(具体什么是浮点数,后续展开),所以你总是会得到一个小数
因为洋大人发明计算机的时候咱们还在玩泥巴,所以程序的世界里面总是会遇到很多英语,多查字典吧。
Excel的类型
等等,为什么Excel里面没有类型这个概念呢?其实是有的,但是Excel考虑到用户的易用程度,刻意隐藏了类型。
我们分别输入1和2、١和٢(阿拉伯语里面的1和2),还有汉语"一"和"二"。然后在Excel里面求和,前面两行分别得到了3和٣(阿拉伯语里面的3),但是汉语就是#VALUE!
报错。为什么呢?因为Excel把1和2、١和٢智能识别成了数字类型,所以可以做加法。但是汉语一和二,就识别成了文本,所以不能做加法。
EXCEL中输入FALSE和TRUE,会被识别成为逻辑类型,奇妙的是,逻辑类型也是可以做加法的,FALSE+TRUE=1。
所以Excel的思路是:用户输入,猜测是什么类型(猜不出来就是文本类型),然后存储。然而SQL比较严谨,需要你先指定字段的类型,然后才能存放数据。Excel则完全没有类似的限制。
类型和计算
在SQL中,用引号括起来的内容表示文本,字母开头表示引用字段,数字就是表示整数和浮点数,其类型取决于字段的类型:
SELECT 1, '1', 1.0, a;
这里的类型分别为:整数、文本、浮点数,字段a
的类型。
一次计算能否完成和数据的类型是强相关的。比如说你不能把两个文本相加(Excel会得到#VALUE!
报错),因为相加两个文本无异于是“五彩斑斓的黑”这样的奇葩需求,计算机也只能说,臣妾做不到啊。
类型对计算的影响还有很多的,这个后续展开。只需要记住:
- 类型是讯息的解释方案,相同的解释方案得到相似的数据,所以又被称作类型。
- 类型会影响计算的结果(比如计算机没法计算“一”+“二”)。
就是这么简单。