Mysql数据类型 来自官方手册5.6
整形的取值范围:
定点数值(精确):
在MySQL中,NUMERIC被实现为DECIMAL,所以关于DECIMAL的以下说明同样适用于NUMERIC。
MySQL以二进制格式存储DECIMAL值。
在DECIMAL列声明中,精度和比例可以(通常是)指定;例如:
工资DECIMAL(5,2)
在这个例子中,5是精度,2是scale。精度表示为值存储的有效数字的数量,标度表示小数点后可存储的位数。
标准SQL要求DECIMAL(5,2)能够存储五位数和两位小数的任何值,因此可以存储在薪水列中的值范围为-999.99至999.99。
在标准SQL中,语法DECIMAL(M)等效于DECIMAL(M,0)。类似地,语法DECIMAL等效于DECIMAL(M,0),M的默认值为10。
如果刻度为0,则DECIMAL值不包含小数点或小数部分。
DECIMAL的最大位数为65。
浮点数值(近似)
FLOAT和DOUBLE类型表示近似数值数据。 MySQL对于单精度值使用四个字节,对于双精度值使用八个字节。
MySQL允许非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,(M,D)表示比值总共可以存储多达M个数字,其中D位可能在小数点之后。例如,定义为FLOAT(7,4)的列在显示时将看起来像-999.9999。当存储值时,MySQL执行舍入,所以如果将999.00009插入到FLOAT(7,4)列中,则近似结果为999.0001。
因为浮点值是近似值并且不作为精确值存储,所以尝试在比较中将它们精确地对待可能会导致问题。它们也受平台或实现的依赖。
为了最大的便携性,需要存储近似数值数据值的代码应使用FLOAT或DOUBLE PRECISION,无需精度或数位数。
关于浮点数和定点数:
定点数中小数点的位置在初始化的时候已经定义好了,如Number(10,5),那么它能表示10位,最大值是99999.99999。这种设计的缺陷是设计的比较死。因为已经占据了要容纳10位数字的空间,那为什么不能容纳99999999.99呢?
所以有了浮点数。
浮点数的小数点位置不是固定的。所以上面说定义浮点数的时候不建议定义小数点后的位数。这不是浮点数的经典使用场景。
如float,有6-7位有效数字,可以表示1.11111也可以表示111111。
使用浮点数的问题:
mysql>
			CREATE
			TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);
mysql>
			INSERT
			INTO t1 VALUES
			,
			101.40,
			21.40),
			,
			-80.00,
			0.00),
->
			,
			0.00,
			0.00),
			,
			-13.20,
			0.00),
			,
			59.60,
			46.40),
->
			,
			30.40,
			30.40),
			,
			37.00,
			7.40),
			,
			-29.60,
			0.00),
->
			,
			60.00,
			15.40),
			,
			-10.60,
			0.00),
			,
			-34.00,
			0.00),
->
			,
			33.00,
			0.00),
			,
			-25.80,
			0.00),
			,
			0.00,
			7.20),
->
			,
			0.00,
			0.00),
			,
			-51.40,
			0.00);
mysql>
			SELECT i,
			SUM(d1)
			AS a,
			SUM(d2)
			AS b
->
			FROM t1 GROUP
			BY i HAVING a <> b;
+------+-------+------+
| i | a | b |
+------+-------+------+
| 1 | 21.4 | 21.4 |
| 2 | 76.8 | 76.8 |
| 3 | 7.4 | 7.4 |
| 4 | 15.4 | 15.4 |
| 5 | 7.2 | 7.2 |
|    6 |
			-51.4 |    0 |
+------+-------+------+
前五个记录看起来不符合比较(a和b的值似乎不同),但由于数字之间的差异显示在十进制左右,这取决于因素 如计算机体系结构或编译器版本或优化级别。 例如,不同的CPU可以不同地评估浮点数。
如果列d1和d2被定义为DECIMAL而不是DOUBLE,则SELECT查询的结果将只包含一行 - 上面显示的最后一行。
进行浮点数比较的正确方法是首先确定数字之间的差异的可接受容差,然后对公差值进行比较。 例如,如果我们认为浮点数在一万(0.0001)的精度范围内相同时,应该被认为是相同的,应该写出比较以发现大于公差值的差异:
mysql>
			SELECT i,
			SUM(d1)
			AS a,
			SUM(d2)
			AS b FROM t1
->
			GROUP
			BY i HAVING
			ABS(a - b)
			>
			0.0001;
+------+-------+------+
| i | a | b |
+------+-------+------+
|    6 |
			-51.4 |    0 |
+------+-------+------+
1 row in set (0.00 sec)
日期型:
用于表示时间值的日期和时间类型是DATE,TIME,DATETIME,TIMESTAMP和YEAR。
每个数据类型的最小值:
字符类型:
表示字符串的数据类型有:是CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM和SET。
CHAR列的长度长度可以是从0到255的任何值。当存储CHAR值时,它们将以指定长度的空格进行右边填充。当检索到CHAR值时,除非启用了PAD_CHAR_TO_FULL_LENGTH SQL模式,否则将删除尾随空格。
VARCHAR列中的值是可变长度的字符串。长度可以指定为0到65,535之间的值。
| 
 Value  | 
 CHAR(4)  | 
 Storage Required  | 
 VARCHAR(4)  | 
 Storage Required  | 
| 
 ''  | 
 ' '  | 
 4 bytes  | 
 ''  | 
 1 byte  | 
| 
 'ab'  | 
 'ab '  | 
 4 bytes  | 
 'ab'  | 
 3 bytes  | 
| 
 'abcd'  | 
 'abcd'  | 
 4 bytes  | 
 'abcd'  | 
 5 bytes  | 
| 
 'abcdefgh'  | 
 'abcd'  | 
 4 bytes  | 
 'abcd'  | 
 5 bytes  | 
选择列的正确类型
为了获得最佳的存储空间,您应该尝试在所有情况下使用最精确的类型。 例如,如果对1到99999范围内的值使用整数列,则MEDIUMINT UNSIGNED是最佳类型。 在表示所有必需值的类型中,此类型使用最少的存储空间。
DECIMAL列的所有基本计算(+, - ,*和/)的精度为65位十进制(10位)。
如果精度不是很重要,或者如果速度是最高优先级,那么DOUBLE类型可能就够了。 为了获得高精度,您可以随时转换为存储在BIGINT中的定点类型。 这使您可以使用64位整数进行所有计算,然后根据需要将结果转换回浮点值。
Mysql数据类型 来自官方手册5.6的更多相关文章
- MySQL 5.1 参考手册CHM (官方 简体中文版)
		
点此下载: MySQL 5.1 参考手册CHM (官方 简体中文版) 在线文档:http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/
 - 【数据库】6.0 MySQL入门学习(六)——MySQL启动与停止、官方手册、文档查询
		
1.0 MySQL主要有四种启动方式:直接启动.安全启动.服务启动.多实例启动. 直接启动: 服务器启动: 安全启动(最常用): 多实例启动: 2.0如何获得MySQL帮助 2.1官方手册 下面提供百 ...
 - MySQL数据类型 int(M) 表示什么意思?详解mysql int类型的长度值问题
		
MySQL 数据类型中的 integer types 有点奇怪.你可能会见到诸如:int(3).int(4).int(8) 之类的 int 数据类型.刚接触 MySQL 的时候,我还以为 int(3) ...
 - (MariaDB)MySQL数据类型详解和存储机制
		
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
 - 翻译:CREATE FUNCTION语句(已提交到MariaDB官方手册)
		
本文为mariadb官方手册:CREATE FUNCTION的译文. 原文:https://mariadb.com/kb/en/library/create-function/我提交到MariaDB官 ...
 - XtraDB/InnoDB的文件格式(已提交到MariaDB官方手册)
		
本文为mariadb官方手册:XtraDB/InnoDB File Format的译文. 原文:https://mariadb.com/kb/en/library/xtradbinnodb-file- ...
 - 数据库服务概述,构建MYSQL服务器,数据库基本管理,mysql数据类型,表结构的调整
		
数据库的发展前引 MySQL的起源与发展过程 最为著名.应用最广泛的开源数据库软件 最早 ...
 - MySQL学习(2)---MySQL数据类型
		
ps:此随笔基于mysql 5.7.*版本. 补充: UNSIGNED:所有整数类型都可以有一个可选(非标准)UNSIGNED属性.无符号类型可用于在列中仅允许非负数存在,或者当开发者需要该列的较大数 ...
 - MySQL数据类型的验证
		
CHAR char (M) M字符,长度是M*字符编码长度,M最大255. 验证如下: mysql)) default charset=utf8; ERROR (): ); use BLOB or T ...
 
随机推荐
- Linux 如何上传/下载文件
			
注: 如果在操作中,提示没有权限请使用" su - "命令来切换当前账号至" root " 账号 一 . 使用 rz / sz 命令 1 . 登陆 Li ...
 - Django-ORM之ForeignKey的使用-多对一关系
			
ForeignKey使用俩表示两张表多对一关系的外键,外键字段要定义在多属性的表中. 定义外键时,to的表可以直接写类名,但是需要注意类的定义顺序:也可以写字符串式的类名,这样就可以忽略class类的 ...
 - 【AMAD】python-goose -- HTML Content/Article 提取器
			
动机 简介 用法 个人评分 动机 新闻网页,结构大多是类似的. 所以,能不能用一种通用的爬取方法来提取其中的数据? 简介 Goose最初是一个Java项目,在2011年被转为了scala项目1. Py ...
 - FTP简单搭建(二)
			
六.配套设置 1.基于用户名的上传和下载 创建用户 useradd alex echo redhat |passwd --stdin alex 指定用户登录的路径 可不设置,不设置则为用户家目录 mk ...
 - iscsi脚本
			
服务端 #!/bin/bash #测试主机是否可以联网 echo -e "\033[31m即将测试主机是否可以联网\033[0m" ping -c 4 www.baidu.com ...
 - ubuntu 16.04 关闭开启图形界面
			
说明案例:ubuntu16.04 关闭图形界面命令: systemctl disable lightdm.service 开启图形界面命令: ln -s /lib/systemd/system/lig ...
 - 思科设备自动退出配置界面、打断命令输入、禁用DNS查询
			
1.自动退出配置界面 问题及原因:当设备没有被操作,空闲一段时间后,控制台回到初始化界面.控制台默认会话时间为10分钟,过期后跳转初始化界面 解决办法:配置控制台永不超时 Switch(config) ...
 - [转] c++加载外部库文件探究
			
首先介绍:用#import导入dll和用#pragma comment导入lib还有在程序中LoadLibrary加载dll有什么区别 (1) #import导入的dll是com组建的dll,主要用来 ...
 - linux 在线安装jdk
			
1. yum -y list java* 2.yum -y install java-1.8.0-openjdk*
 - java循环队列实现代码
			
public class Queue { //队首指针 private int front; //队尾指针 private int rear; //数组 private int[] arr; //数组 ...