MySQL - [17] Oracle、SQLServer、MySQL数据类型对比
题记部分
一、数据类型对比
对应关系
(1)整数类型
Oracle的NUMBER(*,0) 对应 SQL Server的INT 和 MySQL的INT
Oracle的BIGINT 可能需要映射到SQL Server的BIGINT 和 MySQL的BIGINT
(2)浮点数类型
Oracle的BINARY_FLOAT/BINARY_DOUBLE 对应 SQL Server的FLOAT 和 MySQL的DOUBLE
(3)字符串类型
Oracle的VARCHAR2 对应 SQL Server的VARCHAR 和 MySQL的VARCHAR
Oracle的CLOB 对应 SQL Server的NVARCHAR(MAX) 和 MySQL的LONGTEXT
(4)日期时间类型
Oracle的DATE/TIMESTAMP 对应 SQL Server的DATETIME/DATETIME2 和 MySQL的DATETIME/TIMESTAMP
(5)布尔类型
Oracle没有直接的布尔类型,但可以使用TINYINT(1) 或 NUMBER(1) 来对应 SQL Server的BIT 和 MySQL的BOOLEAN/TINYINT(1)
二、相对而言
1、在mysql中如果字段数据类型为varchar(30),那么在Oracle中是?
varchar2(60)
2、varchar和varchar2的区别?
在MySQL中,
VARCHAR(30)
意味着该字段可以存储最多30
个字符,每个字符的长度通常是1到4个字节,具体取决于所使用的字符集。例如,在使用UTF-8编码时,大多数字符占3个字节,而某些特殊字符(如表情符号)可能占用4个字节。然而,在Oracle中,VARCHAR2类型同样用来存储可变长度的字符串,但是Oracle中的字符存储方式略有不同。Oracle默认使用的是内部的多字节字符集,这可能会影响字符的实际存储大小。如果在Oracle中使用的是单字节字符集,那么
VARCHAR2(30 BYTE)
将允许你存储最多30个字节的数据,但这通常不足以存储30个非ASCII字符,因为非ASCII字符可能需要更多的字节来表示。当从MySQL迁移到Oracle时,如果你的字符串包含的是单字节字符(如ASCII),那么
VARCHAR2(30 BYTE)
可能就足够了。但是,如果包含多字节字符(如UTF-8编码下的汉字或其他语言字符),为了安全起见,你可能需要增加VARCHAR2的长度。一个常用的规则是在Oracle中将VARCHAR2的长度设置为MySQL中VARCHAR长度的两倍,以确保可以存储所有可能的多字节字符。因此,对于MySQL中的
VARCHAR(30)
,在Oracle中,你可以选择使用VARCHAR2(60 BYTE)
来确保能够存储相同数量的多字节字符。但是,如果确定字符集中每个字符不会超过3字节,那么使用VARCHAR2(90 BYTE)
会更保险一些。如果Oracle数据库使用的是字符模式(CHAR),那么可以指定VARCHAR2(30 CHAR)
,这将基于字符计数而非字节计数。最后,如果你不确定具体的字符集或字符长度需求,最安全的方法是增加目标字段的长度,例如使用
VARCHAR2(100 BYTE)
或更高,以避免任何潜在的数据截断问题。
3、varchar和varchar2可以设置的最大长度是?
— 业精于勤荒于嬉,行成于思毁于随 —