MySQL Oracle的SQL大對比

前言

  MySQL和Oracle的SQL語句有時候寫起來不一樣,比如什麼地方用單引號 ',什麼地方用雙引號 ",甚至還有反引號 ` 等等令人挺糾結的問題,所以我來總結一下。

字段類型對比

  MySQL的字段類型,和Oracle的字段類型 “貌似” 不一樣 (∩_∩),這就來對比一下:

字段分類 數據庫類型 字段類型 字段含義
數值類型 MySQL TINYINT 佔用空間: 1個字節(Byte)
數值範圍: 0~255
Java Type: Integer
SMALLINT 佔用空間: 2個字節(Byte)
數值範圍: -32768~32767
Java Type: Integer
INT
[常用]
佔用空間: 4個字節(Byte)
數值範圍: -231~231 - 1
Java Type: Integer
BIGINT
[常用]
佔用空間: 8個字節(Byte)
數值範圍: -263~263 - 1
Java Type: Long
FLOAT 單精度浮點數
佔用空間: 4個字節(Byte)
Java Type: Float
DOUBLE(m,d)
[常用]
雙精度浮點數,m(有效位數)和d(小數位數),m d可以不寫
佔用空間: 8個字節(Byte)
Java Type: Double
DECIMAL(m,d)
[常用]
佔用空間: 依賴於m(有效位數)和d(小數位數)
Java Type: Double 或 Decimal
數值類型 Oracle NUMBER(p,s) p(有效位數)s(小數位數),它是十進制精度
佔用空間: 可以高達38位,其中p的默認值是38,s的默認值是0。如果把scale設成負數,Oracle將把該數字取捨到小數點左邊的指定位數
Java Type: Integer Long Double Decimal都行,看情況
DECIMAL(p,s)
[常用]
它是NUMBER(p,s)的子類型
Java Type: 看情況
FLOAT(n) 它是NUMBER(p,s)的子類型,n可以取1~126的值
Java Type: 看情況
BINARY_FLOAT 採用二進制精度,單精度浮點數字數據類型
佔用空間: 32位,5字節存儲空間,其中1字節用於存儲數據值的長度
Java Type: 看情況
BINARY_DOUBLE 採用二進制精度,雙精度浮點數字數據類型
佔用空間: 64位,9字節存儲空間,其中1字節用於存儲數據值的長度
Java Type: 看情況
字符類型 MySQL CHAR(n)
[常用]
固定長度字符串,n可取1~255的值,n表示字符個數,而不是字節個數
Java Type: String
VARCHAR(n)
[常用]
可變長度字符串,n可取1~65535的值
DO類型: String
TINYBLOB(n) n可取1~255的值,不超過 255 個字符的二進制字符串
Java Type: String
TINYTEXT(n) n可取1~255的值,短文本字符串
Java Type: String
BLOB(n) n可取1~65535的值,二進制形式的長文本數據
Java Type: String
TEXT(n) n可取1~65535的值,長文本數據
Java Type: String
MEDIUMBLOB(n) n可取1~16 777 215的值,二進制形式的中等長度文本數據
Java Type: String
MEDIUMTEXT(n) n可取1~16 777 215的值,中等長度文本數據
Java Type: String
LONGBLOB(n) n可取1~4 294 967 295的值,二進制形式的極大文本數據
Java Type: String
LONGTEXT(n) n可取1~4 294 967 295的值,極大文本數據
Java Type: String
字符類型 Oracle CHAR(n)
[常用]
固定長度字符串,n可取1~2000的值,n表示字符個數,而不是字節個數
Java Type: String
VARCHAR(n) 【廢棄】可變長度字符串,n表示字符數,設置前需要考慮是單字節,還是多字節
佔用空間: 1~4000字節
特點:
①VARCHAR只對漢字和全角等字符佔兩字節,數字,英文字符等都是一個字節;
②VARCHAR把空字符串,就當做空字符串來處理。
Java Type: String
VARCHAR2(n)
[常用]
【推薦】可變長度字符串,n表示字符數,設置前需要考慮是單字節,還是多字節
佔用空間: 1~4000字節
特點:
①一般情況下,VARCHAR2把所有字符都佔兩字節處理;
②VARCHAR2把空串等同於null處理。
Java Type: String
NCHAR(n) Unicode數據類型,根據字符集而定的固定長度字符串,最大長度2000bytes
NVARCHAR2(n) Unicode數據類型,根據字符集而定的可變長度字符串,最大長度4000bytes
LONG(n) 【廢棄】可變長字符列,最大長度限制爲2GB,用於不需要作字符串搜索的長串數據
CLOB 最大4G,存儲單字節字符型數據。適用於存儲超長文本
NCLOB 最大4G,存儲多字節國家字符型數據。適用於存儲超長文本
BLOB 最大4G,存儲二進制數據。適用於存儲圖像、視頻、音頻等
BFILE 最大長度是4GB,在數據庫外部保存的大型二進制對象文件
日期時間類型 MySQL DATE
[常用]
格式: yyyy-MM-dd
Java Type: Date
TIME 格式: hh:mm:ss
Java Type: java.sql.Time
TIMESTAMP
[常用]
時間戳
格式: yyyy-MM-dd hh:mm:ss
Java Type: java.sql.Timestamp
DATETIME
[常用]
格式: yyyy-MM-dd hh:mm:ss
Java Type: Date
日期時間類型 Oracle DATE
[常用]
格式: yyyy-MM-dd
Java Type: Date
TIMSTAMP
[常用]
時間戳
格式: yyyy-MM-dd hh:mm:ss
Java Type: java.sql.Timestamp
TIMESTAMP WITH TIME ZONE 時間戳的擴展,加上時區
枚舉類型 MySQL ENUM
[常用]
CREATE TABLE student (gender ENUM(‘Male’,‘Femal’,‘Unknown’));
Oracle 沒有 /

引號使用對比

  一行行文字,不如用表格對比來得痛快!

引號 數據庫類型 用法
單引號 ’ MySQL 將字符串常量括起來,需要注意的是:
'\''使用轉義,可以在兩個單引號中包含一個單引號;
"'"也可以用兩個雙引號包圍一個單引號
Oracle ① 單引號裏的內容,不區分大小寫,系統自動轉爲大寫;
② 表示字符串常量;
③ 被單引號包圍的雙引號,不需要成對出現;
④ 單引號有轉義的作用,比如'',最終得到的是',相當於\'
雙引號 " MySQL 將字符串常量括起來,'"' 兩個單引號包圍一個雙引號,也可以使用"\""轉義
Oracle ① 雙引號括起來的內容,更確切一點叫引證標識符
② 雙引號內部的字符串嚴格區分大小寫 ;
③ 用於避免和關鍵字衝突;
④ 在給列起別名時,只能加雙引號或者不加引號,但不能使用單引號;
⑤ 在to_char(value, pattern)的pattern裏時,雙引號有特殊的作用,就是將非法的字符包起來。例如 select to_char(sysdate, 'hh24'"小時"mm"分"ss"秒"') 結果就是 06時39分51秒
反引號 ` MySQL 用於區分MySQL的關鍵字與普通字符,比如想要用 desc 作列名,就可以加反引號

SELECT後面一定有FROM嗎?

數據庫類型 SELECT後面一定有FROM嗎?
Oracle SELECT後面 一定要有 FROM,否則會報錯ORA-00923:未找到要求的 FROM 關鍵字
如果沒有實際的查詢表,可以把dual表放到FROM後面。
dual是Oracle系統內部提供的一個用於實現臨時數據計算的特殊表,它只有一行一列。可以select * from dual;試一下。
MySQL SELECT後面 可以沒有 FROM
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章