MySQL快速入门之五-MySQL 数据类型疑难问题十问十答

        如下表所示,MySQL数据类型共有30多种,11大类,如此庞大的数量令很多人感觉复杂,甚至摸不着头脑。下面通过十问十答的方式,聚焦MySQL数据类型的疑难问题,帮助大家快速掌握MySQL数据类型的知识。

 问题1:CHAR(M)VARCHAR(M)有什么区别

答:(1)一是支持最长字符长度的区别:CHAR(M)中的M的取值范围为0-255,支持的最长字符数目为255;VARCHAR(M)中的M的取值则比较复杂,其受MySQL最大行长度(65535个字节)和MySQL使用的字符集限制,但一般都在15000个字符以上。比如MySQL选取的字符集为uft8mb4,且只有一列时,M的最大取值为16383;若增加一列,且该列数据类型为INT时,M的最大取值为16382;若选取的字符集为gbk时,且只有一列时,M的最大取值为32766;若增加一列,且该列数据类型为INT时,M的最大取值为32764;

(2)二是存储内容格式的区别:CHAR(M)以固定长度存储字符串。如对CHAR(5),若存储的内容为“张三”,由于该字符串的长度为2,不够5,所以MySQL存储的时候会在其末尾补三个空格存储,存储为“张三   ”;但从数据库中读取该列的数据时,又会自动删除字符串后面的空格,读出来的数据仍然是“张三”;VARCHAR(M)按字符串的实际长度存储字符串,VARCHAR为VARIABLE CHAR即可变长度字符串的意思。如对VARCHAR(5),若存储的内容为“张三”,则MySQL存储的时候仍然为“张三”,不会像CHAR(5)一样在其后面补3个空格。

问题2:在使用时如何确定CHAR(M)和VARCHAR(M)中的M值大小?

答:(1)要根据使用需要确定一个更小的M值,这样可取得一个更好的性能,花费更少的硬件资源;(2)不要认为VARCHAR(M)是按字符串的实际长度存储字符串就选择一个更大的M值。比如VARCHAR(100)与VARCHAR(200)用来存储90个字符的数据,其存储空间确实是相同的,但是对于内存的消耗是不同的。

问题3:在使用应如何选用CHAR(M)VARCHAR(M)?

答:(1)对字符串长度大于255的字符串,选择使用VARCHAR(M);(2)对字符串长度小于255的字符串:①若该数据集的平均长度与最大长度相差很小(尤其是定长字符),应优先选用CHAR(M),以取得更好的性能。比如存储MD5哈希值的密码列,因为是定长的,应该选用CHAR(M);存储姓名的姓名列,因为平均长度与最大长度相差较小,也应该优先选用CHAR(M);②若该数据经常需要被修改,则应优先选用CHAR(M),因为 CHAR(M) 不容易产生碎片。

问题4:TEXT类型CHAR(M)、VARCHAR(M)有什么区别

答:(1)TEXT类型以字符串的实际长度存储字符串(可变长度字符串),这与VARCHAR(M)相同;(2)TEXT类型按其能存储的最大长度字符分配空间,性能较差;且这些类型对应的列不能设置为主键列。

问题5:在使用应如何选用TEXT类型、CHAR(M)VARCHAR(M)?

答:只有在字符串长度很长,无法使用CHAR(M)、VARCHAR(M)表示时才选择TEXT类型表示。

问题6:在使用时应如何选用TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT?

答:尽量选用更小范围的数据类型,因为这样可取得更好的性能,花费更少的硬件资源。比如对age列,应该选用哪种整数数据类型?答:选用TINYINT最佳,并勾选Unsigned,这样其表示的范围0-255可以满足使用要求,且性能最佳。

问题7:FLOAT、DOUBLE、DECIMAL(M,D)有什么区别?

答:(1)由于浮点数表示数字的规定,FLOAT、DOUBLE保存的小数不一定是精确的数值而只是近似数值;而定点数DECIMAL(M,D)在精度范围内表示的是精确的数值;(2)FLOAT、DOUBLE相对于DECIMAL(M,D)的优点是在长度相同的情况下能表示更大的数值范围,缺点是有精度问题。

问题8:在使用时应如何选用FLOAT、DOUBLE、DECIMAL(M,D)?

答:(1)需要表示货币等精确数值时,要使用DECIMAL(M,N);其他情况使用FLOAT或者DOUBLE;(2)对FLOAT和DOUBLE的选用,则尽量选用更小范围的数据类型,这样可取得更好的性能,花费更少的硬件资源。

问题9:在使用时应如何选用YEAR、DATE、TIME、DATETIME、TIMESTAMP?

答:根据实际需求选用对应的数据类型,其中DATETIME为最常用的日期时间类型。

问题10在使用时应如何选用BINARY(M)、VARBINARY(M)、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB?

答:在满足存储数据大小的情况下,按BINARY(M)、VARBINARY(M)、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB的优先顺序选择对应的类型。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值