MYSQL进阶02
- 数据类型
- char与varchar
- text与blob
- 浮点数与定点数
- 日期类型的选择
数据类型
char与varchar
char和varchar类型类似,都用来存储字符串,但是他们保存和检索的方式不同。char属于固定长度的字符类型,而varchar属于可变长度的字符类型。
char是一种固定长度的字符串类型。当定义一个char类型的列时,需要指定该列所能存储的字符数,例如char(10)代表该列可以存储10个字符。如果存储的字符数小于指定的长度,则会在后面自动补齐空格。由于char类型是固定长度的,所以它在存储时会占用完整的指定长度的存储空间。如果存储的数据长度小于指定长度,那么剩余的空间将浪费。
varchar是一种可变长度的字符串类型。当定义一个varchar类型的列时,也需要指定该列所能存储的字符数,例如varchar(10)代表该列可以存储最多10个字符。与char不同,当存储的数据长度小于指定长度时,它不会自动补齐空格,而是只占用实际存储数据所需的存储空间。因此,varchar类型可以更加节省存储空间,但在查询时可能会比char类型稍微慢一些。
使用对比图
text与blob
一般在保存少量字符串的时候,我们会选择char或者varchar;而在保存数据量较大的文本时,通常会选择text和blob。二者之间的主要差别就是blob可以用来保存二进制数据,比如照片;而text只能保存字符数据。text和blob中有分为text,mediumtext,longtext和blog,mediunblob,longblob,三种不同的类型,他们之间的主要区别就是存储文本长度和储存字节不同。
注意:
- blob和text值会引起一些性能问题,特别是在执行了大量的删除操作的时候。
删除操作会在数据表中留下很大的空洞,以后填入这些空洞的数据性能上会有所降低,将以定期使用optimize table功能对这些表进行碎片整理。
- 可以使用组合索引来提高大文本字段的查询性能。
- 在不必要的时候尽量避免检索大型的blob或者text值。
- 把blob和text返利到单独的表中。
浮点数与定点数
浮点数一般用于表示含有小数部分的数值。当一个字段被定义为浮点类型后,如果插入的精度超过该列定义的实际精度,则插入的值会被四舍五入到实际定义的精度,然后插入,四舍五入的过程不会报错。在MYSQL中使用float,double来表示浮点数。
定点数不同于浮点数,定点数是以字符串的形式存放的,所以定点数可以更精确的保存数据。如果实际插入的数值精度大于实际定义的精度,则MYSQL会进行警告,但是数据按照实际的精度四舍五入后插入;但是如果数据模式在传统模式下就会直接报错。
日期类型的选择
MYSQL提供的日期类型包括date,time,datetime,timestamp,以下是他们的选择原则: