1.MySQL数据类型 1.1 所有数据类型的官方文档: https://dev.mysql.com/doc/refman/5.5/en/data-type-overview.html 1.2 数值类型: 整数类型 1)官方文档: https://dev.mysql.com/doc/refman/5.5/en/integer-types.html 2)关键字: int(integer):用4个字节存储,取值范围,最多存储10位 tinyint:用1个字节存储, smallint: 用2个字节存储 mediumint: 用3个字节存储 bigint:用8字节存储 小数类型 浮点型小数 1)官方文档: https://dev.mysql.com/doc/refman/5.5/en/floating-point-types.html 2)关键字: float:单精度浮点数 4字节存储 格式:float(M,D) M总长度 D小数点后的最多位数 double:双精度浮点数 8字节存储 格式:double(M,D) M总长度 D小数点后的最多位数 定点型小数 1)官方文档: https://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html 2)关键字: decimal numeric
MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。 要定义数据类型为DECIMAL的列,请使用以下语法: column_name DECIMAL(P,D); 在上面的语法中: P是表示有效数字数的精度。 P范围为1〜65。 D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。 DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。 与INT数据类型一样,DECIMAL类型也具有UNSIGNED和ZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。 如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。 以下示例使用DECIMAL数据类型定义的一个叫作amount的列。 amount DECIMAL(6,2); 在此示例中,amount列最多可以存储6位数字,小数位数为2位; 因此,amount列的范围是从-9999.99到9999.99。 MySQL允许使用以下语法: column_name DECIMAL§; 这相当于: column_name DECIMAL(P,0); 在这种情况下,列不包含小数部分或小数点。 此外,我们甚至可以使用以下语法。 column_name DECIMAL; 在这种情况下,P的默认值为10。
1.3 日期和时间类型: 日期类型: 1)官方文档: https://dev.mysql.com/doc/refman/5.5/en/datetime.html 2)关键字: date:格式:‘YYYY-MM-DD’ datetime: 格式:‘YYYY-MM-DD HH:MM:SS’ 范围:‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’ timestamp(时间戳): 格式:‘YYYY-MM-DD HH:MM:SS’ 范围:‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC time:格式:‘HH:MM:SS’ year: year(4) 格式’YYYY’ [ year(2) 格式’YY’ 在5.5.27版本以后被废弃]
1.4 字符串类型: 1)官方文档 https://dev.mysql.com/doc/refman/5.5/en/char.html 2)关键字 varchar:动态字符串 varchar(len) len最大取255 说明-当数据长度小于len的时候就存数据的长度,大于len存len个 char:定长字符串 char(len) 说明-当数据长度小于len的时候就存数据的长度和补充的空格,大于len存len个 text:存储长度很长的字符串。通常存储一篇文章。 blob: 存储长度很长的字符串,字符串形式是二进制。 说明-通常存储非文本文件,比如音频视频的二进制数据。
unsigned 简单来说就是无符号数只能取正数, 但是它的范围却增大了一倍! 下面取mysql中各种数值类型有符号数和无符号数的存储范围做对比
一般用decimal,长度18,保存2位小数,具体看业务 在java的开发中,货币在数据库中MySQL常用Decimal和Numric类型表示,这两种类型被MySQL实现为同样的类型。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定;例如:
salary DECIMAL(9,2)
在这个例子中,9(precision)代表将被用于存储值的总的小数位数,而2(scale)代表将被用于存储小数点后的位数。因此,在这种情况下,能被存储在salary列中的值的范围是从-9999999.99到9999999.99。
DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度。一个字符用于值的每一位、小数点(如果scale>0)和“-”符号(对于负值)。如果scale是0,DECIMAL和NUMERIC值不包含小数点或小数部分。 不使用float或者double的原因:因为float和double是以二进制存储的,所以有一定的误差。https://blog.csdn.net/weixin_40807247/article/details/90736221?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-1-90736221.nonecase&utm_term=mysql%20%E9%87%91%E9%A2%9D%E7%94%A8%E4%BB%80%E4%B9%88%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&spm=1000.2123.3001.4430
在 MySQL 中创建表时,对照上面的表格,很容易就能选择到合适自己的数据类型。不过到底是选择 datetime 还是 timestamp,可能会有点犯难。这两个日期时间类型各有优点:datetime 的日期范围比较大;timestamp 所占存储空间比较小,只是 datetime 的一半。
另外,timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。
一般情况下,我倾向于使用 datetime 日期类型。
两者之间的比较:
timestamp容易所支持的范围比timedate要小。 并且容易出现超出的情况2.timestamp比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响.
https://blog.csdn.net/qq_36090419/article/details/80618679?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160316436619725222451550%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160316436619725222451550&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-2-80618679.first_rank_ecpm_v3_pc_rank_v2&utm_term=mysql%EF%BC%8C%E6%B6%89%E5%8F%8A%E5%88%B0%E6%97%A5%E6%9C%9F%E7%9A%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&spm=1018.2118.3001.4187