【MySQL 数据类型】
MySQL 数据类型主要分为以下几类:数值类型、字符串类型、日期和时间类型、二进制类型以及特殊类型。
1. 数值类型:
- `SMALLINT`:用于存储小整数,范围是-32000到32000。
- `INT`:中等大小的整数,范围是-2000000000到2000000000。
- `BIGINT`:用于存储大整数,适用于科学或数学数据。
- `FLOAT`:单精度浮点数,用于存储小数数据。
- `DOUBLE`:双精度浮点数,适合科学数据,精度较高。
- `DECIMAL`和`NUMERIC`:用于存储精确的数值,如货币数额,具有用户自定义的精度和长度。
2. 字符串类型:
- `CHAR`:固定长度的字符串,最大长度有限制。
- `VARCHAR`:可变长度的字符串,长度在特定范围内,适合存储姓名、密码等。
- `TEXT`:用于存储大型文本数据,如新闻故事、产品描述。
- `BLOB`:用于存储二进制大数据,如图片、附件。
3. 日期和时间类型:
- `DATE`:存储日期,格式为yyyy-mm-dd。
- `TIME`:存储时间或时间间隔。
- `DATETIME`:结合日期和时间,精确到秒。
- `TIMESTAMP`:同样结合日期和时间,但可以记录时区信息,适用于事件提醒等场景。
- `YEAR`:仅存储年份,如毕业年、出生年。
4. 特殊类型:
- `ENUM`:允许用户从预定义的一组值中选择一个,最多255个字符。
- `SET`:用户可以从多个预定义值中选择0、1或多个,适合多选项选择。
【Oracle 数据类型】
Oracle 数据类型主要包括标量、复合、引用和LOB四类。
1. 标量(SCALAR):
- 数字类型:`NUMBER`、`PLS_INTEGER`和`BINARY_INTEGER`。`NUMBER`是最通用的,可存储整数和实数;`PLS_INTEGER`和`BINARY_INTEGER`是整数类型,其中`BINARY_INTEGER`用于内存运算。
- 字符类型:`CHAR`、`VARCHAR2`、`LONG`、`NCHAR`和`NVARCHAR2`。`VARCHAR2`是变长字符串,`CHAR`是定长,`LONG`用于长文本,`N*`类型是用于支持Unicode的字符串。
2. 复合(COMPOSITE):组合多个字段的数据类型,如`STRUCT`和`OBJECT`。
3. 引用(REFERENCE):指向其他表的行的指针,如`REF CURSOR`。
4. LOB(Large Object):用于存储大量数据,如`BLOB`(Binary Large Object,二进制数据)、`CLOB`(Character Large Object,字符数据)和`NCLOB`(Unicode Character Large Object)。
Oracle的`NUMBER`类型灵活性很高,可指定精度和刻度。例如,`NUMBER(5,2)`可以存储-999.99到999.99的值。`PLS_INTEGER`和`BINARY_INTEGER`在溢出时处理方式不同,`PLS_INTEGER`会引发错误,而`BINARY_INTEGER`会自动转换为`NUMBER`类型。
Oracle的`VARCHAR2`与MySQL的`VARCHAR`类似,但最大长度为4000个字节,而`LONG`类型可以存储更长的文本,但不适合索引和频繁查询。
综上,MySQL和Oracle数据库提供了丰富多样的数据类型,以满足各种应用程序对数据存储的需求。理解并正确选择合适的数据类型对于数据库设计和性能优化至关重要。