一、MYSQL
char(n) 固定长度,最多255个字符
varchar(n) 可变长度的字符串,最多65535个字符
BLOB 二进制数据,最多65535个字符
text 字符数据,最多65535个字符
1. TEXT与BLOB,创建时都不需要在数据库中设置长度,它们的主要差别就是BLOB保存二进制数据,TEXT保存字符数据。目前几乎所有博客内容里的图片都不是以二进制存储在数据库的,而是把图片上传到服务器然后正文里使用<img>标签引用,这样的博客就可以使用TEXT类型。
数据库中BLOB一般是用来存储图片类型文件的,但是存文件,最好还是用单独的服务器,原因如下:
1)、图片内容一般不会做搜索,没必要放数据库
2)、图片传送比较占用带宽,如果数据库和应用分离(即不再同一台服务器),那么获得一个图片需要从客户端到应用端取数据,应用又需要从数据库去取,这样会占用大量的带宽,同时这也会在数据库服务器和应用服务器两处IO上形成瓶颈。
如果图片单独放在服务器上,取图片的时候,则只需要客户端通过HTTP协议去图片服务器上取,减少带宽占用。并且,这里的IO瓶颈只存在图片服务器上,会快很多。
2. mysql varchar(50) 不管中文 还是英文 都是存50个的,但是一个表中所有varchar字段的总长度跟编码有关,如果是utf-8,那么大概65535/3,如果是gbk,那么大概65535/2
char定义的是固定长度存储,长度范围为0-255,存储时,如果字符数没有达到定义的位数,会在后面用空格补全存入数据库中
varchar是变长长度存储,长度范围为0-65535,存储时,如果字符没有达到定义的位数,也不会在后面补空格
所以在mysql中一般常用的是VARCHAR和TEXT这两种类型
二、ORACLE
CHAR 固定长度字符串 最大长度2000bytes
VARCHAR2 可变长度的字符串, 最大长度4000bytes 可做索引的最大长度749
BLOB 二进制数据 最大长度4G
CLOB 字符数据 最大长度4G
三、对比
1)时间
MYSQL中datetime对应ORACLE中date,格式为 yyyy-MM-dd HH:MM:ss
在mybatis.xml中返回类型需要用对应的类型才能返回正确的值
在程序中都用util.date
2) 大文本
MYSQL中text 对应ORACLE中CLOB
在mybatis.xml中返回类型需要用timestamp两者可以通用
在程序中都用String
四、附一张对应表
MySQL Data Type | Oracle Data Type |
---|---|
BIGINT | NUMBER(19, 0) |
BIT | RAW |
BLOB | BLOB, RAW |
CHAR | CHAR |
DATE | DATE |
DATETIME | DATE |
DECIMAL | FLOAT (24) |
DOUBLE | FLOAT (24) |
DOUBLE PRECISION | FLOAT (24) |
ENUM | VARCHAR2 |
FLOAT | FLOAT |
INT | NUMBER(10, 0) |
INTEGER | NUMBER(10, 0) |
LONGBLOB | BLOB, RAW |
LONGTEXT | CLOB, RAW |
MEDIUMBLOB | BLOB, RAW |
MEDIUMINT | NUMBER(7, 0) |
MEDIUMTEXT | CLOB, RAW |
NUMERIC | NUMBER |
REAL | FLOAT (24) |
SET | VARCHAR2 |
SMALLINT | NUMBER(5, 0) |
TEXT | VARCHAR2, CLOB |
TIME | DATE |
TIMESTAMP | DATE |
TINYBLOB | RAW |
TINYINT | NUMBER(3, 0) |
TINYTEXT | VARCHAR2 |
VARCHAR | VARCHAR2, CLOB |
YEAR | NUMBER |