一瓢捉、目錄:
1.VARCHAR和CHAR的區(qū)別
2.BLOB和TEXT的區(qū)別
二厅目、VARCHAR 和 CHAR 的區(qū)別
2.1 對(duì)于VARCHAR類型:
- 例如VARCHAR(5), 代表可以存儲(chǔ)5個(gè)字符绘闷,當(dāng)只存儲(chǔ)了3個(gè)字符藐守,而不夠5個(gè)的時(shí)候浪藻,就自動(dòng)分配三個(gè)字符長(zhǎng)度浙芙,而不會(huì)像CHAR一樣填充空白登刺。定義VARCHAR必須指定大小。
- 范圍:0-65535個(gè)字符
- 空格符:當(dāng)帶有空格填充的字符被取出時(shí)嗡呼,空格字符不會(huì)被去掉
- 數(shù)據(jù)超過范圍:如果插入的數(shù)據(jù)超過范圍纸俭,在嚴(yán)格的SQL模式下(using strict SQL Mode ),會(huì)產(chǎn)生一條錯(cuò)誤通知南窗,并且插入操作不會(huì)被執(zhí)行揍很。但是如果多余的字符是空格,那么無論在哪種模式下(regardless of SQL mode),空格都會(huì)被切割掉万伤,并且產(chǎn)生一條警告通知窒悔。
2.2 對(duì)于CHAR類型
- 例如CHAR(5),代表可以存儲(chǔ)5個(gè)字符,當(dāng)不夠5個(gè)的時(shí)候敌买,用空格(space)填充简珠。如果定義CHAR類型沒有給出長(zhǎng)度,則默認(rèn)為1放妈。
- 范圍:0-255個(gè)字符
- 空格符:當(dāng)帶有空格填充的字符被取出時(shí)北救,空格字符將會(huì)被去掉(remove),除非SQL模式:PAD_CHAR_TO_FULL_LENGTH被開啟
- 數(shù)據(jù)超過范圍:當(dāng)插入數(shù)據(jù)超過范圍的時(shí)候芜抒,在嚴(yán)格的SQL模式下(using strict SQL Mode )珍策,會(huì)產(chǎn)生一條錯(cuò)誤通知,并且插入操作不會(huì)被執(zhí)行宅倒。但是如果多余的字符是空格攘宙,那么無論在哪種模式下(regardless of SQL mode),空格都會(huì)被切割掉。
2.3 下圖用一張表格較為形象地來表示這兩者的范圍:
VARCHAR | CHAR | |
---|---|---|
類型表示 | VARCHAR(5):存儲(chǔ)5個(gè)字符拐迁,當(dāng)不夠5的時(shí)候蹭劈,自動(dòng)分配相應(yīng)長(zhǎng)度,而不會(huì)填充空白线召。定義VARCHAR必須指定大小 | CHAR(5):存儲(chǔ)5個(gè)字符铺韧,當(dāng)不夠5個(gè)的時(shí)候,用空格(space)填充缓淹。如果定義CHAR類型沒有給出長(zhǎng)度哈打,則默認(rèn)為1 |
范圍 | 0-65535個(gè)字符 | 0-255個(gè)字符 |
空格符 | 當(dāng)帶有空格填充的字符被取出時(shí)塔逃,空格字符不會(huì)被去掉 | 當(dāng)帶有空格填充的字符被取出時(shí),空格字符將會(huì)被去掉(remove)料仗,除非SQL模式:PAD_CHAR_TO_FULL_LENGTH被開啟 |
數(shù)據(jù)超過范圍 | 如果插入的數(shù)據(jù)超過范圍湾盗,在嚴(yán)格的SQL模式下(using strict SQL Mode ),會(huì)產(chǎn)生一條錯(cuò)誤通知立轧,并且插入操作不會(huì)被執(zhí)行格粪。但是如果多余的字符是空格,那么無論在哪種模式下(regardless of SQL mode),空格都會(huì)被切割掉氛改,并且產(chǎn)生一條警告通知帐萎。 | 當(dāng)插入數(shù)據(jù)超過范圍的時(shí)候,在嚴(yán)格的SQL模式下(using strict SQL Mode )平窘,會(huì)產(chǎn)生一條錯(cuò)誤通知吓肋,并且插入操作不會(huì)被執(zhí)行。但是如果多余的字符是空格瑰艘,那么無論在哪種模式下(regardless of SQL mode),空格都會(huì)被切割掉是鬼。 |
三、 BLOB 和 TEXT 的區(qū)別
3.1 BLOB類型:
- BLOB類型: TINYBLOB BLOB MEDIUMBLOB LONGBLOB
- 存儲(chǔ)方式:二進(jìn)制紫新,沒有字符集
- 排序:基于二進(jìn)制數(shù)值
- 數(shù)據(jù)超過范圍:對(duì)于所存數(shù)據(jù)超過容量大小的情況均蜜,在非嚴(yán)格的SQL模式下(strict SQL mode is not enabled),多余的字符將會(huì)被切割掉芒率,并且會(huì)產(chǎn)生一條警告通知囤耳,如果在嚴(yán)格的SQL模式下(using strict SQL Mode ),會(huì)產(chǎn)生一條錯(cuò)誤通知偶芍,并且插入操作不會(huì)被執(zhí)行充择。但是如果多余的字符是空格,那么無論在哪種模式下(regardless of SQL mode),空格都會(huì)被切割掉匪蟀,并且產(chǎn)生一條警告通知椎麦。
- 存儲(chǔ)數(shù)據(jù)后邊的空格
3.2 TEXT類型
- TEXT類型: TINYTEXT TEXT MEDIUMTEXT LONGTEXT
- 存儲(chǔ)方式:字符串,有字符集
- 排序:基于字符集排序
- 數(shù)據(jù)超過范圍:對(duì)于所存數(shù)據(jù)超過容量大小的情況材彪,在非嚴(yán)格的SQL模式下(strict SQL mode is not enabled)观挎,多余的字符將會(huì)被切割掉,并且會(huì)產(chǎn)生一條警告通知段化,如果在嚴(yán)格的SQL模式下(using strict SQL Mode )嘁捷,會(huì)產(chǎn)生一條錯(cuò)誤通知,并且插入操作不會(huì)被執(zhí)行显熏。但是如果多余的字符是空格雄嚣,那么無論在哪種模式下(regardless of SQL mode),空格都會(huì)被切割掉,并且產(chǎn)生一條警告通知喘蟆。
- 不會(huì)存儲(chǔ)數(shù)據(jù)后邊的空格
2.3 用一張表格來表示:
BLOB | TEXT | |
---|---|---|
類型表示 | TINYBLOB BLOB MEDIUMBLOB LONGBLOB | TINYTEXT TEXT MEDIUMTEXT LONGTEXT |
存儲(chǔ)方式 | 二進(jìn)制现诀,沒有字符集 | 字符串夷磕,有字符集 |
排序 | 基于二進(jìn)制數(shù)值 | 基于字符集排序 |
空格符 | 存儲(chǔ) | 不存儲(chǔ) |
數(shù)據(jù)超過范圍 | 對(duì)于所存數(shù)據(jù)超過容量大小的情況,在非嚴(yán)格的SQL模式下(strict SQL mode is not enabled)仔沿,多余的字符將會(huì)被切割掉,并且會(huì)產(chǎn)生一條警告通知尺棋,如果在嚴(yán)格的SQL模式下(using strict SQL Mode )封锉,會(huì)產(chǎn)生一條錯(cuò)誤通知,并且插入操作不會(huì)被執(zhí)行膘螟。但是如果多余的字符是空格成福,那么無論在哪種模式下(regardless of SQL mode),空格都會(huì)被切割掉,并且產(chǎn)生一條警告通知荆残。 | 一樣的 |