成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CHAR 還是 VARCHAR? 這是個問題!

數據庫 MySQL
今天我們來對比下 ORACLE 與 MYSQL 中不同字符數據類型的異同,以避免因前期數據結構設計時數據類型選用不當,造成后續存儲加工和處理數據時的各種坑。

 [[427024]]

本文轉載自微信公眾號「明哥的IT隨筆」,作者 IT明哥 。轉載本文請聯系明哥的IT隨筆公眾號。

1 前言

大家好,我是明哥!

今天我們來對比下 ORACLE 與 MYSQL 中不同字符數據類型的異同,以避免因前期數據結構設計時數據類型選用不當,造成后續存儲加工和處理數據時的各種坑。

2 ORACLE 與 MYSQL 中字符數據類型都有哪些

ORACLE 中內置的字符數據類型主要有以下三大類:

  • CHAR/NCHAR:存儲固定長度的字符串,其中NCHAR使用 national character set;
  • VARCHAR2/VARCHAR/NVARCHAR2:存儲變長字符串,其中 VARCHAR 等同于 VARCHAR2,NVARCHAR2 使用 national character set;
  • CLOB/NCLOB:存儲大小可達 4GB 的字符串,其中 NCLOB 使用 national character set;

MYSQL 中字符數據類型主要有:

  • CHAR:存儲固定長度的字符串;
  • VARCHAR:存儲變長字符串
  • BLOB/TEXT:主要用來存儲大的字符串。

可以看到:

  • 二者都有專門用來處理較大字符串的數據類型,如 CLOB/BLOB/TEXT;
  • 二者都有處理定長字符串的數據類型,如 CHAR;
  • 二者都有處理變長字符串的數據類型,如 VARCHAR;

以下我們重點對比下二者對定長和變長字段類型,即 CHAR 和 VARCHAR ,處理時的異同。

3 ORACLE 和 MYSQL 對 CHAR 和 VARCHAR 處理的相同點在哪里?

3.1 ORACLE 和 MYSQL 對定長字段類型 CHAR 的存儲處理類似,都會對用戶傳入的實際的字符串進行加工處理后再存儲:

  • 如果用戶傳入的實際的字符串的長度,跟 DDL 語句中聲明的該 CHAR 字段的長度相等,則直接存儲用戶傳入的值;
  • 如果用戶傳入的實際的字符串的長度,小于 DDL 語句中聲明的該 CHAR 字段的長度,ORACLE 和 MYSQL 都會在字段末尾補充空格(blank-pad),直到達到聲明的長度;
  • 如果用戶傳入的實際的字符串的長度,大于 DDL 語句中聲明的該 CHAR 字段的長度,ORACLE 和 MYSQL 都會報錯退出(注意:MYSQL中,可以配置使用非 STRICT SQL MODE,此時會截斷超常字段然后存儲截斷后的值并告警,但不會報錯退出);

3.2 ORACLE 和 MYSQL 對變長字段類型 VARCHAR 的存儲處理類似,都不會對用戶傳入的實際的字符串進行加工處理,而是直接校驗存儲:

-如果用戶傳入的實際的字符串的長度,小于或等于 DDL 語句中聲明的該 VARCHAR 字段的最大長度,則直接存儲用戶傳入的值;(實際存儲的數據,都是字段值的實際長度和字段的具體值);

  • 如果用戶傳入的實際的字符串的長度,大于 DDL 語句中聲明的該 VARCHAR 字段的最大長度,ORACLE 和 MYSQL 都會報錯(注意:MYSQL中,是報錯還是截斷,跟超長字段是正常字段還是 trailing spaces,以及是否是 STRICT SQL MODE 有關);

3.3 ORACLE 和 MYSQL 對變長字段類型 VARCHAR 的取出處理類似

  • ORACLE 和 MYSQL 對變長字段類型 VARCHAR 的取出處理類似,都不會對實際存儲的字段值做加工處理,而是直接返回,因為存儲時已經做了校驗和加工。

3.4 ORACLE 和 MYSQL 中都是 VARCHAR(ORACLE 中是 VARCHAR2)的存儲空間使用率更好

  • ORACLE 和 MYSQL 中都是 VARCHAR(ORACLE 中是 VARCHAR2)的存儲空間使用率更好,因為 CHAR 類型字段在實際長度不夠時會在末尾補充空格(blank-pads)并存儲這些 trailing blanks 而 VARCHAR 不會,所以 VARCHAR 可以更有效地存儲數據,空間使用率更高。

4 ORACLE 和 MYSQL 對 CHAR 和 VARCHAR 處理的不同點在哪里?

4.1 ORACLE 和 MYSQL 對 CHAR 和 VARCHAR 處理的不同點,體現在如何取出 CHAR 類型的字段數據上:

  • ORACLE 會將存儲的值原封不動地取出,不做任何加工,所以通過LENGTH()函數返回的,就是 DDL 語句中聲明的長度(當然底層存儲時 pad 了 space);
  • MYSQL 會將存儲的值最右邊的空格全部截取后再取出,所以通過LENGTH()函數返回的,不是 DDL 語句中聲明的長度,而是字段的實際有效長度(當然底層存儲時 pad 了 space);

4.2 ORACLE 和 MYSQL 對 CHAR 和 VARCHAR 處理的不同點,體現在如何對比 CHAR 和 VARCHAR 類型的字段數據上:

  • Oracle 對 CHAR/NCHAR 采用的是 “blank-padded comparison semantics” 模式:如果對比的字段長度不同, Oracle 會在較短字段的末尾補充空格使得兩者長度相同,然后再逐個字符進行比較。所以只有末尾空格數有差異的字段,對被認為是相等的字段;
  • Oracle 對 VARCHAR2/NVARCHAR2 采取的是 “non-padded comparison semantics” 模式:只有兩個字段的長度相同且字符完全相同,才會被認為是相等的字段;
  • MySQL 對 CHAR, VARCHAR, 和 TEXT 采取的都是類似 ORACLE 的 “blank-padded comparison semantics” 的模式:即如果對比的字段長度不同, Oracle 會在較短字段的末尾補充空格使得兩者長度相同,然后再逐個字符進行比較。所以只有末尾空格數有差異的字段,對被認為是相等的字段;

5 知識總結

  • ORACLE 和 MYSQL 都有對應變長字符串的數據類型,如 VARCHAR/VARCHAR2, 兩者在數據的存儲和取出上的處理類似;
  • ORACLE 和 MYSQL 都有對應定長字符串的數據類型,如 CHAR,兩者對 CHAR 類型字段的存儲處理類似,都會校驗字段長度,并在字段不夠時通過空格右補齊;
  • ORACLE 在取出 CHAR 類型字段時,不會做額外處理,會將存儲的字段值直接取出;MYSQL 在取出 CHAR 類型字段時,會對存儲的字段值做額外處理,會將字段最右端的空格截掉再返回;
  • Oracle 在對比 CHAR/NCHAR 類型字段時,采用的是 “blank-padded comparison semantics” 模式;
  • Oracle 在對比 VARCHAR2/NVARCHAR2 類型字段時,采取的是 “non-padded comparison semantics” 模式;
  • MySQL 在對比 CHAR, VARCHAR, 和 TEXT 類型字段時,采取的都是類似 ORACLE 的 “blank-padded comparison semantics” 的模式;

CHAR and varchar in mysql

CHAR in oracle and mysql

責任編輯:武曉燕 來源: 明哥的IT隨筆
相關推薦

2015-05-05 09:39:57

編程被編程

2020-02-17 21:17:40

www域名主機

2020-06-21 05:55:45

勒索軟件攻擊贖金

2017-06-02 08:48:29

互斥鎖JavaCAS

2018-05-29 09:08:16

vSAN 塊存儲應用

2020-01-20 14:44:03

云計算架構IT

2012-09-13 10:44:32

Web設計Web分頁架構設計

2017-04-25 14:58:02

網絡可見性漏洞

2023-03-29 10:48:28

2011-09-01 14:22:06

OracleCharVarChar

2018-03-05 08:52:57

2025-04-29 03:00:00

手機號存儲string

2009-11-24 14:21:17

2011-04-27 09:25:13

MySQL字符型數據

2010-11-26 13:18:53

MySQL字符串

2024-03-18 08:11:27

jQuery 4.0前端開發web開發

2020-07-10 09:56:01

Java參數變量

2020-11-09 09:52:11

程序數據

2016-03-11 09:46:26

面向對象設計無狀態類

2010-07-28 13:50:14

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜久久久久久久久久一区二区 | 日韩精品一区二区三区视频播放 | 国产精品激情 | 亚洲高清在线 | 亚洲成av | 久久久区| 日韩精品久久久 | 精品国产乱码久久久久久蜜柚 | www国产成人免费观看视频 | 精品视频一区二区三区 | 精品一区国产 | 精品国产欧美一区二区三区成人 | 欧美日韩中文在线 | a国产一区二区免费入口 | 国产精品久久久久久久久久免费看 | 免费午夜电影 | 久久大陆 | 欧美一区在线视频 | 国产电影一区二区三区爱妃记 | 蜜桃av鲁一鲁一鲁一鲁 | 爱爱综合网 | 亚洲九九 | 成人国产精品一级毛片视频毛片 | 日韩一区二区三区四区五区六区 | 91视频大全| 在线观看免费观看在线91 | 国产精品国产三级国产aⅴ入口 | 亚洲精品亚洲人成人网 | 精品亚洲一区二区三区四区五区 | 精品在线99 | 日韩在线播放中文字幕 | 色综合99| 九色91视频 | 在线一区二区三区 | 国产精品久久久久一区二区三区 | 欧美性猛交一区二区三区精品 | 日韩一区二区在线播放 | 中文字幕一区二区三区在线观看 | 美女在线国产 | 亚洲高清在线 | 国产精品高潮呻吟久久av黑人 |