MySQL负数怎么表示 mysql decimal 负数

mysql 数据类型的详解MySQL数据库的表是一个二维表,由一个或多个数据列构成 。
每个数据列都有它的特定类型,该类型决定了MySQL如何看待该列数据 , 我们可以把整型数值存放到字符类型的列中,MySQL则会把它看成字符串来处理 。
MySQL中的列类型有三种:数值类、字符串类和日期/时间类 。
从大类来看列类型和数值类型一样,都是只有三种 。但每种列类型都还可细分 。
下面对各种列类型进行详细介绍 。
数值类的数据列类型
数值型的列类型包括整型和浮点型两大类 。
TINYINT:1字节 非常小的正整数 , 带符号:-128~127,不带符号:0~255
SMALLINT:2字节 小整数,带符号:-32768~32767,不带符号:0~65535
MEDIUMINT:3字节 中等大小的整数 , 带符号:-8388608~8388607 , 不带符号:0~16777215
INT:4字节 标准整数,带符号:-2147483648~2147483647,不带符号:0~4294967295
BIGINT:8字节 大整数,带符号:-9223372036854775808~9233372036854775807 , 不带符号:0~18446744073709551615
FLOAT:4字节 单精度浮点数 , 最小非零值: -1.175494351E-38 , 最大非零值: -3.402823466E 38
DOUBLE:8字节 双精度浮点数 , 最小非零值: -2.2250738585072014E-308 , 最大非零值: -1.7976931348623157E 308
DECIMAL:M 2字节 以字符串形式表示的浮点数 , 它的取值范围可变,由M和D的值决定 。
MYSQL支持大量的列类型,它们可以被分为 3 类:数字类型、日期和时间类型以及字符串(字符)类型 。这个章节首先给出可用类型的概述 , 并且总结各类型所需的存储需求,然后提供各类型中的类型范畴更详细的描述 。概述有意地简化了 。更详细的说明应该参考特写列类型的附加信息,例如你能为其指定值的允许格式 。
MySQL 支持的列类型在下面列出 。下列代码字母用于描述中:
M指出最大的显示尺寸 。最大的显示尺寸长度为 255 。D适用于浮点类型 。指出跟随在十进制小数点后的数字数量 。最大可能值为 30,但不应大于M-2 。
方括号 (“[”and“]”) 指定可选的类型修饰部份 。
注意,如果为一个列指定了ZEROFILL,MySQL 将自动为这个列添加UNSIGNED属性 。
警告:你应该知道当在两个整数类型值中使用减法时,如有一个为UNSIGNED类型,那么结果也是无符号的 。查看章节6.3.5 Cast 函数 。
TINYINT[(M)] [UNSIGNED] [ZEROFILL]-128到127 。无符号的范围是0到255 。
BITBOOL它们是TINYINT(1)的同义词 。
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]一个小整数 。有符号的范围是-32768到32767 。无符号的范围是0到65535 。
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]一个中等大小的整数 。有符号的范围是-8388608到8388607 。无符号的范围是0到16777215 。
INT[(M)] [UNSIGNED] [ZEROFILL]一个正常大小的整数 。有符号的范围是-2147483648到2147483647 。无符号的范围是0到4294967295 。
INTEGER[(M)] [UNSIGNED] [ZEROFILL]INT的同义词 。
BIGINT[(M)] [UNSIGNED] [ZEROFILL]一个大的整数 。有符号的范围是-9223372036854775808到9223372036854775807 。无符号的范围是0到18446744073709551615 。
你应该知道的有关BIGINT列的一些事情:
BIGINT或DOUBLE值来完成的,因此你不应该使用大于9223372036854775807(63 bits) 的无符号大整数,除了位函数之外!如果你这样做了,结果中的某些大数字可能会出错,因为将BIGINT转换成DOUBLE时产生了舍入错误 。MySQL 4.0 在下列情况下可以处理BIGINT:
在一个BIGINT列中使用整数存储一个大的无符号值 。
在MIN(big_int_column)和MAX(big_int_column)中 。
【MySQL负数怎么表示 mysql decimal 负数】当两个操作数都是整数时使用操作符 ( 、-、*、等) 。
通常你可以在一个BIGINT列中以字符串方式存储的一个精确的整数 。在这种情况下,MySQL 将执行一个字符串到数字的转换,包括无 intermediate 的双精度表示法 。
当两个参数均是整数值时,“-”、“ ”和“*”将使用BIGINT运算!这就意味着,如果两个大整数的乘积(或函数的结果返回整数)的结果大于9223372036854775807时 , 你可能会得到意想不到的结果 。
FLOAT(precision) [UNSIGNED] [ZEROFILL]一个浮点型数字 。
precision可以是=24作为一个单精度的浮点数字和介于 25 和 53 之间作为一个双精度的浮点数字 。这些类型与下面描述的FLOAT和DOUBLE类型相似 。FLOAT(X)有与相应的FLOAT和DOUBLE类型同样的范围,但是显示尺寸和十进制小数位数是未定义的 。在 MySQL 3.23 中,它是一个真实的浮点值 。而在 MySQL 早期的版本中,FLOAT(precision)通常有 2 小数位 。注意,由于在 MySQL 中所有的计算都是以双精度执行的,所以使用FLOAT可能带来一些意想不到的问题 。查看章节A.5.6 解决没有匹配行的问题 。
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]一个小的(单精度) 浮点数字 。允许的值是-3.402823466E 38到-1.175494351E-38、0和1.175494351E-38到3.402823466E 38 。如果UNSIGNED被指定,负值是不允许的 。M是显示宽度,D是小数位数 。FLOAT没有参数或有X= 24 的FLOAT(X)代表一个单精度的浮点数字 。
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]一个正常大小的(双精度)浮上数字 。允许的值是-1.7976931348623157E 308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E 308 。如果UNSIGNED被指定,负值是不允许的 。M是显示宽度,D是小数位数 。DOUBLE没胡参数或有 25 =X= 53 的FLOAT(X)代表一个双精度的浮点数字 。
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]
REAL[(M,D)] [UNSIGNED] [ZEROFILL]它们是DOUBLE同义词 。
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]一个未压缩(unpacked)的浮点数 。运作如同一个CHAR列:“unpacked” 意味着数字是以一个字符串存储的,值的每一位将使用一个字符 。小数点并且对于负数,“-”符号不在M中计算(但是它们的空间是被保留的) 。如果D是 0,值将没有小数点或小数部份 。DECIMAL值的最大范围与DOUBLE一致,但是对于一个给定的DECIMAL列,实际的范围可以被所选择的M和D限制 。如果UNSIGNED被指定 , 负值是不允许的 。如果D被忽略,缺省为 0 。如果M被忽略,缺省为 10 。在 MySQL 3.23 以前,M参数必须包含符号与小数点所需的空间 。
DEC[(M[,D])] [UNSIGNED] [ZEROFILL]
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]DECIMAL的同义词 。
DATE一个日期 。支持的范围是'1000-01-01'到'9999-12-31' 。MySQL 以'YYYY-MM-DD'格式显示DATE值,但是允许你以字符串或数字给一个DATE列赋值 。查看章节6.2.2.2DATETIME、DATE和TIMESTAMP类型 。
DATETIME一个日期和时间的组合 。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59' 。MySQL 以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值 , 但是允许你以字符串或数字给一个DATETIME列赋值 。查看章节6.2.2.2DATETIME、DATE和TIMESTAMP类型 。
TIMESTAMP[(M)]一个时间戳 。范围是'1970-01-01 00:00:00'到2037年间的任意时刻 。MySQL 4.0 和更早版本中,TIMESTAMP值是以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式显示的,它取决于M是否是14(或省略)、12、8或6,但是允许你以字符串或数字给一个TIMESTAMP列赋值 。从 MySQL 4.1 开始 , TIMESTAMP以'YYYY-MM-DD HH:MM:DD'格式作为字符返回 。如果你你希望以数字形式返回则必须在该时间戳字段后加上0 。不同的时间戳长度是不支持的 。从 MySQL 4.0.12 开始,选项--new可以被用来使服务器与 4.1 一样运作 。TIMESTAMP列有益于记录一个INSERT或UPDATE操作的日期和时间,因为如果你自己没有给它赋值 , 它将被自动地设置为最近一次操作的日期和时间 。也可以通过给它赋一个NULL而使它设置为当前的日期和时间 。查看章节6.2.2 Date 和 Time 类型 。参数M只影响一个TIMESTAMP列的显示格式;它的值总是占用 4 个字节存储 。注意,当TIMESTAMP(M)列的M是 8 或 14 时,它返回的是数字而其它的TIMESTAMP(M)列返回的是字符串 。这仅仅是为了可以可靠地转储并恢复到其它格式的表中 。查看章节6.2.2.2DATETIME、DATE和TIMESTAMP类型 。TIME一个时间 。范围是'-838:59:59'到'838:59:59' 。MySQL 以'HH:MM:SS'格式显示TIME值,但是允许你使用字符串或数字来给TIME列赋值 。查看章节6.2.2.3TIME类型 。YEAR[(2|4)]一个 2 或 4 位数字格式的年(缺省为 4 位) 。允许的值是1901到2155、0000(4 位年格式) 以及使用 2 位格式的 1970-2069 (70-69) 。MySQL 以YYYY格式显示YEAR值 , 但是允许你使用字符串或数字来给YEAR列赋值 。(YEAR类型在 MySQL 3.22 之前不支持 。) 查看章节6.2.2.4YEAR类型 。
[NATIONAL] CHAR(M) [BINARY]一个定长的字符串 , 当存储时,总是以空格填满右边到指定的长度 。M的范围是 0 到 255 (在 MySQL 3.23 版本之前为 1 到 255) 。当该值被检索时,尾部空格将被删除 。CHAR值根据缺省的字符集进行忽略大小写的排索与比较,除非指定了关键词BINARY 。NATIONAL CHAR(或短形式NCHAR) 是以 ANSI SQL 方式定义一个CHAR列 , 它将使用缺省的字符集 。这在 MySQL 中是默认的 。
CHAR是CHARACTER的缩写 。MySQL 允许以CHAR(0)类型建立一个列 。一些老程序运行时必需一个列,却又并不使用这个列的值,你就不得不为了适应它而建立该列,在这情况下,CHAR(0)将是很有益的 。当需要一个列仅保存两个值时:一个为CHAR(0)(该列没有定义为NOT NULL),这将仅占用一个比特位来存储 2 个值:NULL或"" 。查看章节6.2.3.1CHAR和VARCHAR类型 。CHAR这是CHAR(1)的同义词 。
[NATIONAL] VARCHAR(M) [BINARY]一个变长的字符串 。注意:尾部的空格在存储时将会被删除(这与 ANSI SQL 约规不同) 。M的范围是 0 到 255 (在 MySQL 4.0.2 之前的版本中是 1 到 255) 。
VARCHAR值以大小写忽略方式进行排索与比较,除非关键词BINARY被指定 。查看章节6.5.3.1 隐式的列定义变化 。VARCHAR是CHARACTER VARYING的缩写 。查看章节6.2.3.1CHAR和VARCHAR类型 。
TINYBLOBTINYTEXT一个BLOB或TEXT列,最大长度为 255 (2^8 - 1) 个字符 。查看章节6.5.3.1 隐式的列定义变化 。查看章节6.2.3.2BLOB和TEXT类型 。
BLOBTEXT一个BLOB或TEXT列,最大长度为 65535 (2^16 - 1) 个字符 。查看章节6.5.3.1 隐式的列定义变化 。查看章节6.2.3.2BLOB和TEXT类型 。
MEDIUMBLOBMEDIUMTEXT一个BLOB或TEXT列,最大长度为 16777215 (2^24 - 1) 个字符 。查看章节6.5.3.1 隐式的列定义变化 。查看章节6.2.3.2BLOB和TEXT类型 。
LONGBLOBLONGTEXT一个BLOB或TEXT列 , 最大长度为 4294967295 (2^32 - 1) 个字符 。查看章节6.5.3.1 隐式的列定义变化 。注意,由于服务器/客户端的协议以及 MyISAM 表通常有一个 16M 每通信包/表行的限制,你仍然不能使用这个类型的整个范围 。查看章节6.2.3.2BLOB和TEXT类型 。ENUM('value1','value2',...)一个枚举类型 。一个仅能有一个值的字符串对象,这个值选自值列'value1'、'value2'、...、NULL或特殊的""出错值 。一个ENUM列可以有最大 65535 不同的值 。查看章节6.2.3.3ENUM类型 。SET('value1','value2',...)一个集合 。一个能有零个或更多个值的字符串对象,其中每个值必须选自值列'value1'、'value2'、... 。一个SET列可以有最大 64 个成员 。查看章节6.2.3.4SET类型 。
MySQL 支持所有的 ANSI/ISO SQL92 数字类型 。这些类型包括准确数字的数据类型(NUMERIC、DECIMAL、INTEGER和SMALLINT),也包括近似数字的数据类型(FLOAT、REAL和DOUBLE PRECISION) 。关键词INT是INTEGER的同义词,关键词DEC是DECIMAL的同义词 。
NUMERIC和DECIMAL类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的 。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据 。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例如:
salary DECIMAL(5,2)
在这个例子中,5(精度(precision)) 代表重要的十进制数字的数目,2(数据范围(scale)) 代表在小数点后的数字位数 。在这种情况下,因此,salary列可以存储的值范围是从-99.99到99.99 。(实际上 MySQL 在这个列中可以存储的数值可以一直到999.99,因为它没有存储正数的符号) 。
译者注:
M 与D 对DECIMAL(M, D) 取值范围的影响
类型说明 取值范围(MySQL3.23) 取值范围(MySQL = 3.23)
DECIMAL(4, 1) -9.9 到 99.9 -999.9 到 9999.9
DECIMAL(5, 1) -99.9 到 999.9 -9999.9 到 99999.9
DECIMAL(6, 1) -999.9 到 9999.9 -99999.9 到 999999.9
DECIMAL(6, 2) -99.99 到 999.99 -9999.99 到 99999.99
DECIMAL(6, 3) -9.999 到 99.999 -999.999 到 9999.999
# 在MySQL 3.23 及以后的版本中 , DECIMAL(M, D) 的取值范围等于早期版本中的DECIMAL(M2, D) 的取值范围 。注释结束:
在 ANSI/ISO SQL92 中,句法DECIMAL(p)等价于DECIMAL(p,0) 。同样的,在执行被允许决定值p的地方,句法DECIMAL等价于DECIMAL(p,0) 。MySQL 目前还不支持DECIMAL/NUMERIC数据类型的这些变体形式中的任一种 。一般来说这并不是一个严重的问题,通过明确地控制精度和数值范围可以得到这些类型的主要功能益处 。
DECIMAL和NUMERIC值是作为字符串存储的,而不是作为二进制浮点数,以便保护这些值的十进制精确度 。一个字符用于数值的每一位、小数点(如果scale 0) 和“-”符号(对于负值) 。如果scale是 0 , DECIMAL和NUMERIC值不包含小数点或小数部分 。
DECIMAL和NUMERIC值的最大范围与DOUBLE一致,但是对于一个给定的DECIMAL或NUMERIC列,它的实际范围可制定该列时的precision或scale限制 。当这样的列被赋给了小数点的位数超过scale所指定的值时,该将根据scale进行四舍五入 。当一个DECIMAL或NUMERIC列被赋与一个大小超过指定(或缺省)的precisionandscale的限止范围时,MySQL 以该列范围的端点值存储该值 。
mysql 数值类型 中带符号的/无带符号的 区别带符号和无符号,顾名思义,就是是否有正负之分:
比如8为二进制,
如果带符号,需要用1位表示符号(1表示负数,0表示正),剩下7位表示数据.
那么表示范围是-127---127(包括-0和 0).
如果不带符号,8位全部表示数据,
那么表示范围是
0--256
mysql建立存储过程中如何判断一个数字的正负并使用select输出CREATE PROCEDURE testproc (IN v_i integer )
BEGIN
if v_i0 then
select v_i as '负数';
else
select v_i as '正数';
end if;
END$$
delimiter ;
关于MySQL负数怎么表示和mysql decimal 负数的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读