建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

HW云数据库

发帖: 159粉丝: 15

发消息 + 关注

发表于2018年12月21日 09:43:38 4090 1
直达本楼层的链接
楼主
显示全部楼层
[技术干货] MySQL和SQLServer数据类型对比

由于MySQL与Server在数据类型上有部分差异,比如数值类型表示的数值的范围和精度,日期类型的格式和精度等,在我们转换数据库或是在迁移数据库时,会遇上一定的麻烦,下面介绍了一些MySQL与SQLServer数据库数据类型的对应关系。以下所涉及的所有字段类型,在华为云数据管理服务(DAS)均已支持,DAS旨在为用户提供便捷、高效的数据库管理操作入口,欢迎体验使用DAS服务~
MySQL SQL Server 说明
类型 存储空间(字节) 类型 存储空间(字节)
位值类型 BIT
    (1~64)
(M+7)/8
    M为指定的长度
BIT 可被压缩 MySQL的BIT可以指定长度(1到64),一般使用b'101010'类似的二进制序列为其赋值;
      SQLServer的BIT不可指定长度,可以取值为1、0或NULL,且如果表中的BIT列为8列或更少,则这些列作为1个字节存储。如果BIT列为9到16列,则这些列作为2个字节存储,以此类推,SQLServer的BIT对应于MySQL的TINYINT(1)。
整数类型 TINYINT
[-128~127]
1 TINYINT
[0-255]
1 注意:MySQL和SQLServer的TINYINT表示的范围并不相同;
      MySQL和SQLServer的数值类型(包括下方的浮点数类型)都可以在声明时指定显示的长度,如INT(10),当实际存储的数值为7时,则会显示为0000000007。
SMALLINT
[-2^15~2^15-1]
2 SMALLINT
[-2^15~2^15-1]
2
MEDIUMINT
    [-2^23~2^23-1]
3 不支持
INT
[-2^31~ 2^31-1]
4 INT
[-2^31~ 2^31-1]
4
BIGINT
[-2^63~2^63-1]
8 BIGINT
[-2^63~2^63-1]
8
INTEGER 4 不支持 相当于INT
SERIAL 8 不支持 相当于BIGINT   UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
BOOL 1 不支持 相当于TINYINT(1)
BOOLEAN 1 不支持
货币值数据类型 不支持 SMALLMONEY 4 SQLServer的货币值数据类型,精度为所代表的货币单位的万分之一,在MySQL中SMALLMONEY可以用decimal(10,4)替代,MONEY可以用默认转换为decimal(19,4)替代。
不支持 MONEY 8
浮点数类型 FLOAT 4或8 FLOAT 4或8 MySQL和SQLServer的浮点数存储的都是近似值,高精度的计算可能会有误差。如果需要较高的精度,推荐使用DECIMAL类型。
      MySQL的FLOAT(M,D)和FLOAT(p)是不同的,前者表示一个单精度浮点数,精度为7位小数,M和D都是显示的位数,M是总位数,D是小数点后面的位数;
      后者与SQLServer的FLOAT相同,都可指定尾数的位数p,如果0<=p<=24则为4个字节,如果25<=p<=53则为8个字节
REAL 8 REAL 4 MySQL:DOUBLE的同义词,如果sql_mode启动了REAL_AS_FLOAT模式,则是FLOAT的同义词而不是   DOUBLE。
    SQLServer:相当于FLOAT(24)
DOUBLE 8 不支持 MySQL:双精度浮点数,精确到15位小数。
DOUBLE PRECISION 8 DOUBLE PRECISION MySQL:相当于DOUBLE;
    SQLServer:相当于FLOAT(53)。
定点数类型 DECIMAL
(1~65[,1~30])
可变 DECIMAL
(1~38[,1~38])
可变 固定精度和小数位数的数值数据类型。
    对于精度比较高的东西,比如货币数字,可以采用DECIMAL类型,FLOAT和BOUBLE容易产生误差。存储所需要的空间都与采用的精度有关系。
NUMERIC 可变 NUMERIC 可变 等同于DECIMAL
DEC 可变 DEC 可变
FIXED 可变 不支持
日期类型 DATE
[1000-01-01~9999-12-31]
3 DATE
[0001-01-01~9999-12-31]
3 显示的格式都为YYYY-MM-DD
DATETIME
[1000-01-01 00:00:00.000000~9999-12-31 23:59:59.999999]
5+小数秒存储 DATETIME
[1753-01-01 00:00:00.000~9999-12-31 23:59:59.997]
8 显示的格式都为YYYY-MM-DD   hh:mm:ss[.fraction]
    MySQL的精度为0.000001,SQLServer的精度会舍入到 .000、.003 或 .007 秒三个增量。
TIMESTAMP
[1970-01-01 00:00:01.000000~2038-01-19 03:14:07.999999]
4+小数秒存储 TIMESTAMP 8 MySQL和SQLServer的TIMESTAMP如果未明确赋值,则会自动设置为最近修改的日期和时间。
TIME
[-838:59:59.000000 ~838:59:59.000000]
3+小数秒存储 TIME
[00:00:00.0000000~23:59:59.9999999]
5 显示的格式hh:mm:ss[.fraction]
    注意:MySQL和SQLServer的精确度不同,MySQL是6位,SQLServer是7位。
YEAR
    [1901~2155]和0000
1 不支持 MySQL:显示的格式YYYY
不支持 SMALLDATETIME
    [1900-01-01 00:00:00~2079-06-06 23:59:59]
4 SQLServer:显示格式YYYY-MM-DD   hh:mm:ss,精确度为1分钟
不支持 DATETIME2
    [0001-01-01 00:00:00.0000000~9999.12.31 23:59:59.9999999]
可变 SQLServer:显示的格式YYYY-MM-DD   hh:mm:ss[.fraction]
    精度为7位数,精度小于3时为6个字节;精度为3和4时为7个字节。所有其他精度则需要8个字节。
不支持 DATETIMEOFFSET
    [0001-01-01 00:00:00.0000000~9999.12.31 23:59:59.9999999]
10 SQLServer:带有时区偏移量的时间格式,显示的格式为YYYY-MM-DD   hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]
    时区偏移量-14:00到+14:00
字符串类型 CHAR
(1~255)
可变 CHAR
(1~8000)或MAX
n   (n为定义的字符串长度,以字节为单位) 注意:MySQL和SQLServer所采用的单位是不同的,MySQL是以字符为单位,所需要的存储空间为M*w个字节,w为字符集中最大长度的字符所需的字节数。
      SQLServer是以字节为单位的,对于单字节编码字符集(如拉丁文),存储大小为n个字节,并且可存储的字符数也为n,对于多字节编码字符集,存储大小仍为n个字节,但可存储的字符数可能小于n。
VARCHAR
(1~65535)
L+1
    (L表示给定字符串值的实际长度)
VARCHAR
(1~8000)或MAX
n+2 可变长度的字符串数据
TINYTEXT
    (1~255)
L+1 不支持 MySQL的TEXT类似于SQLServerVARCHAR类型,在声明时指定的是存储用的字节数,实际存储的字符数和字符集有关。
    SQLServer将在未来版本中删除TEXT数据类型,不建议使用。
TEXT
(1~65535)
L+2 TEXT
MEDIUMTEXT
    (1~2^24-1)
L+3 不支持
LONGTEXT
    (1~2^32-1)
L+4 不支持
不支持 NVARCHAR
    (1~4000)或MAX
存储的是Unicode数据类型的字符,所有的字符都用两个字节表示。
不支持 NCHAR
    (1~4000)
不支持 NTEXT SQLServer将在未来版本中删除NTEXT数据类型,不建议使用。
字节串类型 BINARY
(1~255)
M
    (M为指定的字节长度)
BINARY
(1~8000)
n 类似于VARCHAR,但是保存的是二进制数据而非字符。
VARBINARY
(1~65535)
L+1 VARBINARY
(1~8000)或MAX
n+2
TINYBLOB L+1 不支持 类似于VARBINARY,但是保存的是二进制数据而非字符。
BLOB L+2 不支持
MEDIUMBLOB L+3 不支持
LONGBLOB L+4 不支持
不支持 IMAGE SQLServer将在未来版本中删除IMAGE数据类型,不建议使用。
ENUM类型 ENUM 可变 不支持 单选字符串类型,适合存储表单界面中的单选值,格式为:enum('选项1','选项2','选项3',...),enum的enum的选项都会对应一个数字,依次是1,2,3,4,5...,最多有65535个选项,使用的时候可以使用选项的字符串格式,也可以使用对应的数字。
SET类型 SET 可变 不支持 多选字符串类型,适合存储表单界面的多选值。
以上为MySQL和SQLServer的常用数据类型的使用方法对比。DAS服务提供友好的UI操作界面,可以让您方便、高效的管理数据库,敬请期待~

 

举报
分享

分享文章到朋友圈

分享文章到微博

建赟

发帖: 673粉丝: 48

发消息 + 关注

发表于2018年12月29日 10:37:21
直达本楼层的链接
沙发
显示全部楼层

了解下

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册