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

CHAR 還是 VARCHAR? 這是個(gè)問(wèn)題!

數(shù)據(jù)庫(kù) MySQL
今天我們來(lái)對(duì)比下 ORACLE 與 MYSQL 中不同字符數(shù)據(jù)類(lèi)型的異同,以避免因前期數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)時(shí)數(shù)據(jù)類(lèi)型選用不當(dāng),造成后續(xù)存儲(chǔ)加工和處理數(shù)據(jù)時(shí)的各種坑。

 [[427024]]

本文轉(zhuǎn)載自微信公眾號(hào)「明哥的IT隨筆」,作者 IT明哥 。轉(zhuǎn)載本文請(qǐng)聯(lián)系明哥的IT隨筆公眾號(hào)。

1 前言

大家好,我是明哥!

今天我們來(lái)對(duì)比下 ORACLE 與 MYSQL 中不同字符數(shù)據(jù)類(lèi)型的異同,以避免因前期數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)時(shí)數(shù)據(jù)類(lèi)型選用不當(dāng),造成后續(xù)存儲(chǔ)加工和處理數(shù)據(jù)時(shí)的各種坑。

2 ORACLE 與 MYSQL 中字符數(shù)據(jù)類(lèi)型都有哪些

ORACLE 中內(nèi)置的字符數(shù)據(jù)類(lèi)型主要有以下三大類(lèi):

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

MYSQL 中字符數(shù)據(jù)類(lèi)型主要有:

  • CHAR:存儲(chǔ)固定長(zhǎng)度的字符串;
  • VARCHAR:存儲(chǔ)變長(zhǎng)字符串
  • BLOB/TEXT:主要用來(lái)存儲(chǔ)大的字符串。

可以看到:

  • 二者都有專(zhuān)門(mén)用來(lái)處理較大字符串的數(shù)據(jù)類(lèi)型,如 CLOB/BLOB/TEXT;
  • 二者都有處理定長(zhǎng)字符串的數(shù)據(jù)類(lèi)型,如 CHAR;
  • 二者都有處理變長(zhǎng)字符串的數(shù)據(jù)類(lèi)型,如 VARCHAR;

以下我們重點(diǎn)對(duì)比下二者對(duì)定長(zhǎng)和變長(zhǎng)字段類(lèi)型,即 CHAR 和 VARCHAR ,處理時(shí)的異同。

3 ORACLE 和 MYSQL 對(duì) CHAR 和 VARCHAR 處理的相同點(diǎn)在哪里?

3.1 ORACLE 和 MYSQL 對(duì)定長(zhǎng)字段類(lèi)型 CHAR 的存儲(chǔ)處理類(lèi)似,都會(huì)對(duì)用戶(hù)傳入的實(shí)際的字符串進(jìn)行加工處理后再存儲(chǔ):

  • 如果用戶(hù)傳入的實(shí)際的字符串的長(zhǎng)度,跟 DDL 語(yǔ)句中聲明的該 CHAR 字段的長(zhǎng)度相等,則直接存儲(chǔ)用戶(hù)傳入的值;
  • 如果用戶(hù)傳入的實(shí)際的字符串的長(zhǎng)度,小于 DDL 語(yǔ)句中聲明的該 CHAR 字段的長(zhǎng)度,ORACLE 和 MYSQL 都會(huì)在字段末尾補(bǔ)充空格(blank-pad),直到達(dá)到聲明的長(zhǎng)度;
  • 如果用戶(hù)傳入的實(shí)際的字符串的長(zhǎng)度,大于 DDL 語(yǔ)句中聲明的該 CHAR 字段的長(zhǎng)度,ORACLE 和 MYSQL 都會(huì)報(bào)錯(cuò)退出(注意:MYSQL中,可以配置使用非 STRICT SQL MODE,此時(shí)會(huì)截?cái)喑W侄稳缓蟠鎯?chǔ)截?cái)嗪蟮闹挡⒏婢粫?huì)報(bào)錯(cuò)退出);

3.2 ORACLE 和 MYSQL 對(duì)變長(zhǎng)字段類(lèi)型 VARCHAR 的存儲(chǔ)處理類(lèi)似,都不會(huì)對(duì)用戶(hù)傳入的實(shí)際的字符串進(jìn)行加工處理,而是直接校驗(yàn)存儲(chǔ):

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

  • 如果用戶(hù)傳入的實(shí)際的字符串的長(zhǎng)度,大于 DDL 語(yǔ)句中聲明的該 VARCHAR 字段的最大長(zhǎng)度,ORACLE 和 MYSQL 都會(huì)報(bào)錯(cuò)(注意:MYSQL中,是報(bào)錯(cuò)還是截?cái)啵L(zhǎng)字段是正常字段還是 trailing spaces,以及是否是 STRICT SQL MODE 有關(guān));

3.3 ORACLE 和 MYSQL 對(duì)變長(zhǎng)字段類(lèi)型 VARCHAR 的取出處理類(lèi)似

  • ORACLE 和 MYSQL 對(duì)變長(zhǎng)字段類(lèi)型 VARCHAR 的取出處理類(lèi)似,都不會(huì)對(duì)實(shí)際存儲(chǔ)的字段值做加工處理,而是直接返回,因?yàn)榇鎯?chǔ)時(shí)已經(jīng)做了校驗(yàn)和加工。

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

  • ORACLE 和 MYSQL 中都是 VARCHAR(ORACLE 中是 VARCHAR2)的存儲(chǔ)空間使用率更好,因?yàn)?CHAR 類(lèi)型字段在實(shí)際長(zhǎng)度不夠時(shí)會(huì)在末尾補(bǔ)充空格(blank-pads)并存儲(chǔ)這些 trailing blanks 而 VARCHAR 不會(huì),所以 VARCHAR 可以更有效地存儲(chǔ)數(shù)據(jù),空間使用率更高。

4 ORACLE 和 MYSQL 對(duì) CHAR 和 VARCHAR 處理的不同點(diǎn)在哪里?

4.1 ORACLE 和 MYSQL 對(duì) CHAR 和 VARCHAR 處理的不同點(diǎn),體現(xiàn)在如何取出 CHAR 類(lèi)型的字段數(shù)據(jù)上:

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

4.2 ORACLE 和 MYSQL 對(duì) CHAR 和 VARCHAR 處理的不同點(diǎn),體現(xiàn)在如何對(duì)比 CHAR 和 VARCHAR 類(lèi)型的字段數(shù)據(jù)上:

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

5 知識(shí)總結(jié)

  • ORACLE 和 MYSQL 都有對(duì)應(yīng)變長(zhǎng)字符串的數(shù)據(jù)類(lèi)型,如 VARCHAR/VARCHAR2, 兩者在數(shù)據(jù)的存儲(chǔ)和取出上的處理類(lèi)似;
  • ORACLE 和 MYSQL 都有對(duì)應(yīng)定長(zhǎng)字符串的數(shù)據(jù)類(lèi)型,如 CHAR,兩者對(duì) CHAR 類(lèi)型字段的存儲(chǔ)處理類(lèi)似,都會(huì)校驗(yàn)字段長(zhǎng)度,并在字段不夠時(shí)通過(guò)空格右補(bǔ)齊;
  • ORACLE 在取出 CHAR 類(lèi)型字段時(shí),不會(huì)做額外處理,會(huì)將存儲(chǔ)的字段值直接取出;MYSQL 在取出 CHAR 類(lèi)型字段時(shí),會(huì)對(duì)存儲(chǔ)的字段值做額外處理,會(huì)將字段最右端的空格截掉再返回;
  • Oracle 在對(duì)比 CHAR/NCHAR 類(lèi)型字段時(shí),采用的是 “blank-padded comparison semantics” 模式;
  • Oracle 在對(duì)比 VARCHAR2/NVARCHAR2 類(lèi)型字段時(shí),采取的是 “non-padded comparison semantics” 模式;
  • MySQL 在對(duì)比 CHAR, VARCHAR, 和 TEXT 類(lèi)型字段時(shí),采取的都是類(lèi)似 ORACLE 的 “blank-padded comparison semantics” 的模式;

CHAR and varchar in mysql

CHAR in oracle and mysql

責(zé)任編輯:武曉燕 來(lái)源: 明哥的IT隨筆
相關(guān)推薦

2015-05-05 09:39:57

編程被編程

2020-02-17 21:17:40

www域名主機(jī)

2020-06-21 05:55:45

勒索軟件攻擊贖金

2017-06-02 08:48:29

互斥鎖JavaCAS

2018-05-29 09:08:16

vSAN 塊存儲(chǔ)應(yīng)用

2020-01-20 14:44:03

云計(jì)算架構(gòu)IT

2012-09-13 10:44:32

Web設(shè)計(jì)Web分頁(yè)架構(gòu)設(shè)計(jì)

2017-04-25 14:58:02

網(wǎng)絡(luò)可見(jiàn)性漏洞

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

手機(jī)號(hào)存儲(chǔ)string

2009-11-24 14:21:17

2011-04-27 09:25:13

MySQL字符型數(shù)據(jù)

2010-11-26 13:18:53

MySQL字符串

2024-03-18 08:11:27

jQuery 4.0前端開(kāi)發(fā)web開(kāi)發(fā)

2020-07-10 09:56:01

Java參數(shù)變量

2020-11-09 09:52:11

程序數(shù)據(jù)

2016-03-11 09:46:26

面向?qū)ο?/a>設(shè)計(jì)無(wú)狀態(tài)類(lèi)

2010-07-28 13:50:14

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 99re免费 | 91激情电影 | 黄色a三级 | 欧美日一区二区 | www久久久 | 日韩午夜在线观看 | 成人在线免费网站 | 亚洲一区二区av | 国产成人综合一区二区三区 | 国产欧美日韩二区 | 欧美操操操 | 一级黄色影片在线观看 | 91久久国产综合久久91精品网站 | 中文字幕亚洲欧美日韩在线不卡 | 欧美日韩专区 | 99精品欧美一区二区三区综合在线 | 一区二区三区四区视频 | 992人人草| 欧美三级久久久 | 国产成人福利视频在线观看 | 精品在线一区 | 欧美一区二区三区四区视频 | 久久91精品| 精品久久久久国产 | 久久亚洲欧美日韩精品专区 | 蜜桃视频在线观看免费视频网站www | 99视频免费看 | 91资源在线| 中文字幕免费观看 | 欧美久久久久久久久中文字幕 | 国产9 9在线 | 中文 | 成人综合伊人 | 国产第一页在线观看 | 色av一区二区三区 | 免费a v网站| 成人精品系列 | 免费播放一级片 | 69亚洲精品 | 日韩av免费在线观看 | 一本大道久久a久久精二百 国产成人免费在线 | 午夜电影福利 |