char与varchar
区别一,定长和变长
char 表示定长,长度固定,varchar表示变长,即长度可变
区别之二,存储的容量不同
对char来说,最多能存放的字符个数 255,和编码无关。
而varchar呢,最多能存放 65532 个字符。
char和varchar类似,都是用来存储字符串,但它们保存和检索的方式不同。char属于固定长度的字符类型,而varchar属于可变长度的字符类型。
应用场景:
由于char是固定长度的,所以它的处理速度比varchar快得多,但是其缺点是浪费存储空间,程序需要对行尾空格进行处理,所以对于那些长度变化不大并且对查询速度有较高要求的数据可以考虑使用char类型来存储。
长度变化大,应该用varchar.(因为char是定长的)
Text与Blob
一般在保存少量字符串的时候,我们会选择char或者varchar;而在保存较大文本时,通常会选择使用text或者blob。二者之间的主要区别是blob能用来保存二进制数据,比如照片。
text只能保存字符数据,比如一篇文章或者日记。
对于含有text和blob字段的表,如果经常做删除和修改记录的操作要定时执行optimize table功能对表进行碎片整理。
浮点数与定点数
浮点数(float double )一般用于表示含有小数部分的数值。当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值。
例如:插入值1.23456,该值会被截断,并保存为1.2
例如插入一个数131072.32变为131072.31,这是数值使用单精度浮点数表示时,产生了误差。这是浮点数特有的问题,因此在精度要求比较高的应用中(比如货币)要使用定点数而不是浮点数来保存数据。
定点数(decimal)实际上是以字符串形式存放的,所以定点数可以更精确地保存数据。对于精度要求更高的应用中,建议使用定点数来存储数值,保证结果的准确性。
所以使用浮点数和定点数是,用户应该考虑到以下几个原则:
1.浮点数(float double)存在误差
2.对于货币等对精度敏感的数据,应该使用定点数(decimal)表示或存储
3.在编程中,如果用到浮点数,要特别注意误差问题,并特别注意 误差问题,并尽量避免做浮点数比较。
4.要注意浮点数中一些特殊值的处理。
日期类型选择
如果只需要记录年份,那么用一个字节来存储year类型完全可以满足。
如果要记录年月日时分秒,并且记录的年份比较久远,那么最好使用datatime,而不是timestamp。因为timestamp表示的日期范围比datatime要短得多。
如果记录的日期需要让不同时区的用户使用,那么最好使用timestamp,因为日期类型中只有它能和实际时区相对应。