MYSQL 与MSSQL 数据类型 对比

MYSQL版本5.1

 MSSQL 2008


--MYSQL5.1 与MSSQL 2008 数据类型 对比


--分类:A 数值类型,B 日期时间类型 ,C 字符串类型
--A.数值类型
BIT(M),BOOL/BOOLEN
---与MSSQL相比BIT代表的意思不一样,BOOL与MSSQL BIT类似 但是也不一样,BOOL 与MYSQL TINYINT(1)一样,所以与MSSQL BIT 非0为1不一样(除NULL)
TINYINT,SMALLINT,MEDIUMINT,BIGINT 
--都可以指定 [(M)] [UNSIGNED] [ZEROFILL]
--MYSQL 比MSSQL 多出来了一个MEDIUMINT类型 占3个字节
--当两个操作数均为整数值时,-、+和* 操作符使用BIGINT算法。这说明如果乘两个大整数(或来自返回整数的函数),当结果大于9223372036854775807时,会得到意想不到的结果。
--这太不好了。。要不然就是报错不支持好点,来个意想不到的结果。。。

FLOAT,DOUBLE
--相比MSSQL 来说 他们也能声明(M,D) 精度,小数位。
DECIMAL,NUMERIC,FIXED
--比MYSQL 多了另一个同义词FIXED
--DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略, 默认是0。如果M被省略, 默认是10。
--这与MSSQL 相比来说 精度最大38 相差比较大。

--以上后面三者还有差异是与MSSQL相比 可以声明是否正负也就是unsigned标志 ,还能设计显示格式 用zerofill 来填充指定的M长度,
--unsigned标志来确定有无符号,如果是无符号的,你值是有符号也将是无符号的。如果指定用 zerofill 的话,表示是unsigned的


--相比MSSQL来说少了两个货币类型
SmallMoney 
Money  


--B.日期时间类型
DATE 
--范围为'1000-01-01'到'9999-12-31'  3字节 ,MSSQL 0001-01-01 到 9999-12-31 差的比较远啊。3字节
TIME
--范围是'-838:59:59'到'838:59:59'。3字节。
--MSSQL DATE(1-7) 00:00:00.0000000 到 23:59:59.9999999  固定5字节。


DATETIME
--支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'  8字节。
--MSSQL 1753 年 1 月 1 日到 9999 年 12 月 31 日 8字节


TIMESTAMP
--时间戳。范围是'1970-01-01 00:00:00'到2037年。
YEAR[(2|4)]
--两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到2155和0000。在两位格式中,允许的值是70到69,表示从1970年到2069

相对MSSQL 来比 少了
SMALLDATETIME,
TETIME2 
--精度小于 3 时为 6 个字节;精度为 4 和 5 时为 7 个字节。所有其他精度则需要 8 个字节。
DATETIMEOFFSET 
三个时间类型
但是多了个YEAR类型


对于日期类型,MYSQL 有严格模式 和NO_ZERO_DATE 模式 ,限制有点宽松,如果NO_ZERO_DATE 模式 如果转不过去时间就是0表示,并警告
MSSQL 如果是不能转成日期 则报错。MYSQL 对于日期的输入格式 不太严格


--C.字符串类型
CHAR
--CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。
--当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

--而MSSQL 是1-8000个字节。 查时也会去掉空格。
VARCHAR
--VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
--同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。
--VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留


--而MSSQL n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节
--进行查找时,也会去掉尾部空格

BINARY
VARBINARY
--以上与MSSQL都类似

BLOB
TEXT
--他们还分了TINY,MEDIUM。。。分类。而MSSQL没分。

--相对MSSQL来说少了一个image二进制数据

ENUM
SET
--多出来两个集合类型,相当于程序里面的类(对象)这种形式了 比如ENUM('男','女')

--对于MSSQL来说少分类了UICODE 单独的字符串类型 NCHAR NVARCHAR(MYSQL 是通过字符集来限定)。以及VARCHAR/NVARCHAR(MAX)




与MSSQL 相比还差的其他数据类型
1.SQL_VARIANT --用于存储 SQL Server 支持的各种数据类型(不包括 text、ntext、image、timestamp 和 sql_variant)的值。
2.XML 数据类型
3.uniqueidentifier 
4.表变量 table







MYSQL 的数据类型 貌似没有专门的系统表存储,而且不能创建自己定义的类型。

MSSQL 有专门的系统表来存储 所有数据类型。还可以依靠 系统类型创建自己定义的类型,2K5以后还能利用CLR创建类型

MYSQL也没有数据类型的优先级 描述。

都 有 CAST 和CONVERT 函数 CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name) 。与MSSQL有差异。

MYSQL 也没有加减乘除的精度运算规则

你可能感兴趣的:(SQL,MYSQL)