标签:blob 精确 table post 数据存储 书籍 详细 blog 是什么
关于字段的选择其实很多地方都有进行详细的介绍,我这里只写一下我在使用过程中的心得感受。如果想要全面的了解的话,大家可以去看高性能MYSQL这一本书籍,里面有一章节介绍的特别全面,基本涉及MYSQL中全部的字段的介绍。
我这里给大家介绍的就一些常用的字段,例如:int、float、double、 decimal、varchar、char、 date、datetime等八种常用的类型。
在数据库设计过程中我们要本着够用的原则,如果一味的把数据字段范围设为最大或者默认值的话,会导致存储空间大量的浪费。在数据量特别大的情况下,这样的设计原理将会使数据库空间造成严重的浪费,也会对数据库的执行效率造成很大的影响。所以我们在做数据库设计的时候要谨慎再谨慎、小心再小心。
下面说一下字段各自的使用原则:
1.当数据存储的是字符,且长度是一个固定区间定值的话就可以考虑使用char来进行存储,如果字符长度是未知的且长度变化特别明显的话,这个时候最好使用varchar来存储。但是不管使用的是哪种字段来进行存储,都不要把字段的初始长度设置为最大化,应该是根据业务需求来存储最合适的长度字段。
2.数据库设计过程中尽量使用int来作为字段类型,因为在所有的数据类型中int不管是存储空间还是执行速度方面都是最好的。例如:如果业务中存储的都是数据的话而且长度不是特别长的话,就可以考虑使用int来进行存储,或者业务中要对数据进行排序的时候需要使用某一标识权重之类的,也可以使用int来进行存储。但是不要因为int高效,而有意识的把所有字段都设计成int来处理,最终还是要根据业务的具体需求来设计相应的字段。
3.在涉及到金额的时候如果对精度要求不高的情况下可以优先使用float,其次是使用double来进存储。如果对精度要求比较高的情况下最好使用decimal来存储,但是相应的它 的效率没有float和double那么高效。具体使用哪种还是要根据业务的具体需求来选择。
4.关于date和datetime的用法,就要看你想要存储时间的精确值了,如果仅仅是想要精确到天的话使用date就可以了,如要要精确到秒一级别的就要使用datetime了。有时候大家使用datetime的使用却只是存储到天的日期单位时,这个时候就会自动添加00:00:00在数据的后面,作为秒一级别的数据。
5.int(5)和int(10)的区别是什么?想必大家也很好奇吧,其实5和10其实只是显示长度的却别而已,也就是不管int(x)x的值是什么值,存储数字的取值范围还是int本身数据类型的取值范围,x只是数据显示的长度而已。
6.varchar(10)和char(10)的差别是什么?存储超过时候会发生什么问题呢?这个问题其实也相对经典,我也是整了很久才搞清楚的。在MYSQL5,5以后,varchar(x)x中范其实是存储字段的长度范围,就是一个字符代表一个长度,不管这个字符是汉子还是字符都算是一个长度单位。varchar虽然设置长度值,可是因为varchar是可变的长度类型,也就是当存储的长度小于x时候,其实实际的存储空间不是x而是实际存储的字符长度+一些标示空间。当然如果超过x的长度的话还是会报错的。而char(y)中y的值就是存储空间实际的存储长度,超过这个长度的话就会报错。
---------------------
类型名称 |
显示长度 |
数据库类型 |
JAVA类型 |
JDBC类型索引(int) |
描述 |
|
|
|
|
|
|
VARCHAR |
L+N |
VARCHAR |
java.lang.String |
12 |
|
CHAR |
N |
CHAR |
java.lang.String |
1 |
|
BLOB |
L+N |
BLOB |
java.lang.byte[] |
-4 |
|
TEXT |
65535 |
VARCHAR |
java.lang.String |
-1 |
|
|
|
|
|
|
|
INTEGER |
4 |
INTEGER UNSIGNED |
java.lang.Long |
4 |
|
TINYINT |
3 |
TINYINT UNSIGNED |
java.lang.Integer |
-6 |
|
SMALLINT |
5 |
SMALLINT UNSIGNED |
java.lang.Integer |
5 |
|
MEDIUMINT |
8 |
MEDIUMINT UNSIGNED |
java.lang.Integer |
4 |
|
BIT |
1 |
BIT |
java.lang.Boolean |
-7 |
|
BIGINT |
20 |
BIGINT UNSIGNED |
java.math.BigInteger |
-5 |
|
FLOAT |
4+8 |
FLOAT |
java.lang.Float |
7 |
|
DOUBLE |
22 |
DOUBLE |
java.lang.Double |
8 |
|
DECIMAL |
11 |
DECIMAL |
java.math.BigDecimal |
3 |
|
BOOLEAN |
1 |
同TINYINT |
|
|
|
|
|
|
|
|
|
ID |
11 |
PK (INTEGER UNSIGNED) |
java.lang.Long |
4 |
|
|
|
|
|
|
|
DATE |
10 |
DATE |
java.sql.Date |
91 |
|
TIME |
8 |
TIME |
java.sql.Time |
92 |
|
DATETIME |
19 |
DATETIME |
java.sql.Timestamp |
93 |
|
TIMESTAMP |
19 |
TIMESTAMP |
java.sql.Timestamp |
93 |
|
YEAR |
4 |
YEAR |
java.sql.Date |
91
|
MYSQL数据库设计之字段选择原则
标签:blob 精确 table post 数据存储 书籍 详细 blog 是什么
原文地址:https://www.cnblogs.com/phoebeyue/p/10250496.html