varchar和char有什麼區別,舉例說明

2022-03-19 12:09:27 字數 5324 閱讀 5952

1樓:抄永望瀧赫

區別:1.char的長度是固定的,而varchar2的長度是可以變化的,

比如,儲存字串「abc",對於char

(10),表示你儲存的字元將佔10個位元組(包括7個空字元),而同樣的varchar2

(10)則只占用3個位元組的長度,10只是最大值,當你儲存的字元小於10時

2樓:賭俠小濤

char 和 varchar

固定長度 (char) 或可變長度 (varchar) 字元資料型別。

char[(n)]

長度為 n 個位元組的固定長度且非 unicode 的字元資料。n 必須是乙個介於 1 和 8,000 之間的數值。儲存大小為 n 個位元組。

char 在 sql-92 中的同義詞為 character。

varchar[(n)]

長度為 n 個位元組的可變長度且非 unicode 的字元資料。n 必須是乙個介於 1 和 8,000 之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是 n 個位元組。

所輸入的資料字元長度可以為零。varchar 在 sql-92 中的同義詞為 char varying 或 character varying。

注釋如果沒有在資料定義或變數宣告語句中指定 n,則預設長度為 1。如果沒有使用 cast 函式指定 n,則預設長度為 30。

將為使用 char 或 varchar 的物件被指派資料庫的預設排序規則,除非用 collate 子句另外指派了特定的排序規則。該排序規則控制用於儲存字元資料的**頁。

支援多語言的站點應考慮使用 unicode nchar 或 nvarchar 資料型別以儘量減少字元轉換問題。如果使用 char 或 varchar:

如果希望列中的資料值大小接近一致,請使用 char。

如果希望列中的資料值大小顯著不同,請使用 varchar。

如果執行 create table 或 alter table 時 set ansi_padding 為 off,則乙個定義為 null 的 char 列將被作為 varchar 處理。

當排序規則**頁使用雙位元組字元時,儲存大小仍然為 n 個位元組。根據字串的不同,n 個位元組的儲存大小可能小於 n 個字元。

3樓:零點二十

char型舉例:'我'

varchar(長度)舉例:『我我我我我我我我我』

mysql中char和varchar有什麼區別?

4樓:超級飄飄乖乖

1.都是用來儲存字串的,只是他們的儲存方式不一樣。

2.char有固定的長度,而varchar屬於可變長的字元型別。

char是一種固定長度的型別,varchar則是一種可變長度的型別,它們的區別是:

char(m)型別的資料列裡,每個值都占用m個位元組,如果某個長度小於m,mysql就會在它的右邊用空格字元補足.在varchar(m)型別的資料列裡,每個值只占用剛好夠用的位元組再加上乙個用來記錄其長度的位元組(即總長度為l+1位元組)。

在mysql中用來判斷是否需要進行對據列型別轉換的規則

1、在乙個資料表裡,如果每乙個資料列的長度都是固定的,那麼每乙個資料行的長度也將是固定的.

2、只要資料表裡有乙個資料列的長度的可變的,那麼各資料行的長度都是可變的.

3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約儲存空間,mysql會把這個資料表裡的固定長度型別的資料列轉換為相應的可變長度型別.

5樓:椰子糖

varchar通常用於儲存可變長字串。在磁碟儲存資料時,它只會占用實際使用到的空間,因此對效能有提公升。vachar在儲存資料時會額外使用1個或者2個字元,用於記錄列的長度,如果列內位元組長度小於等於255就使用1個位元組記錄,如果是大於255則使用2個位元組記錄。

因為varchar是變長的,所以update操作可能會產生碎片,從而使列的長度變長,mysql還需要做額外的工作處理。其實varchar(5)和varchar(255)儲存'hello'所用的空間是一樣的,但是我們在實際使用的時候,列的長度還是越短越好,原因是更長的列會占用更多的記憶體,mysql通常會分配固定大小的記憶體塊儲存內部值。這個在記憶體臨時表做排序和操作的時候會變得很糟糕,在磁碟臨時表進行排序時也會特別的糟糕。

再說一下char,對比下你就會明白。

char型別適用於儲存固定長度的資料。比如說md5後的密碼,這個長度就是固定的32位,很適合使用char型別。因為char型別是固定長度,因此在修改資料時也不容易產生碎片。

他在磁碟上的儲存空間是固定的,如果儲存的資料長度不夠,會在右側以空格的方式補充,方便進行比較。對於非常短的列(單位元組字符集),char的效率比varchar要高,因為char不需要使用額外的位元組去記錄長度。

使用什麼樣的型別儲存資料,要根據實際情況而定,最好是對各種儲存型別都有一定的了解。

純手打,希望可以幫到你,共同進步。:)

6樓:我**很紅

在varchar(m)型別的資料列裡,每個值只占用剛好夠用的位元組再加上乙個用來記錄其長度的位元組,這個說法是錯的。當 m <= 255 的時候是用乙個位元組即可記錄其長度,當 m>255 的時候則需要2個位元組。因為 1 個位元組只能記錄變長長度為 0~255,而如果變長長度為 32767 這種大於 255 的值的時候,是沒有辦法單單用1個位元組記錄下來的。

7樓:

char固定長度,是說占用空間的長度一定,而不是必須有那麼多值。你輸入兩個字元,第三個字元空著,但是必須不能被其它字元占用。

varchar就可以啊!沒有占用到那麼長,就可以少給她分配空間,從而達到介紹資源的目的!

8樓:匿名使用者

char是一種固定長度的型別,varchar則是一種可變長度的型別,它們的區別是:

char(m)型別的資料列裡,每個值都占用m個位元組,如果某個長度小於m,mysql就會在它的右邊用空格字元補足.(在檢索操作中那些填補出來的空格字元將被去掉)在varchar(m)型別的資料列裡,每個值只占用剛好夠用的位元組再加上乙個用來記錄其長度的位元組(即總長度為l+1位元組).

在mysql中用來判斷是否需要進行對據列型別轉換的規則

1、在乙個資料表裡,如果每乙個資料列的長度都是固定的,那麼每乙個資料行的長度也將是固定的.

2、只要資料表裡有乙個資料列的長度的可變的,那麼各資料行的長度都是可變的.

3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約儲存空間,mysql會把這個資料表裡的固定長度型別的資料列轉換為相應的可變長度型別.

例外:長度小於4個字元的char資料列不會被轉換為varchar型別

9樓:小湯圓

乙個定長

乙個不定長

a char(10)

b varchar(10)

都存入'abc'

a10位元組

b3位元組

char(10)和varchar(10)主要的區別是什麼?

10樓:真巨集邈夫美

1.char的長度是固定的,而varchar2的長度是可以變化的,

比如,儲存字串「abc",對於char (10),表示你儲存的字元將佔10個位元組(包括7個空字元),而同樣的varchar2

(10)則只占用3個位元組的長度,10只是最大值,當你儲存的字元小於10時,按實際長度儲存。

2.char的效率比varchar2的效率稍高。

3.目前varchar是varchar2的同義詞。工業標準的varchar型別可以儲存空字串,但是oracle不這樣做,儘管它保留以後這樣做的權利。

4.char(10)若輸入資料的字元數小於10,則系統自動在其後新增空格來填滿設定好的空間。若輸入的資料過長,將會截掉其超出部分。

varchar(10)資料型別的儲存長度為實際數值長度。

11樓:檢白凝枚葉

你想要區分這個變成成的區別,主要是乙個是字段的長度,乙個是詞語的程度是不同的型別。

mysql中char和varchar有什麼區別?

12樓:雯兒心

他們的儲存方式和資料的檢索方式都不一樣。

資料的檢索效率是:char>varchar>text

空間占用方面,要具體情況具體分析了。

char(m) m個位元組,0 <=m<= 255

varchar(m) l+1個位元組,其中l<=m且0 <=m<= 65535

text l+2個位元組,其中l< 216

char為定長,varchar,text為變長

char在儲存的時候,後面(右邊)會用空格填充到指定的長度,在檢索的時候後面的空格會去掉,所以檢索出來的資料需要再用什麼trim之類的函式去處理。(與sql server可能有些不同)

varchar在儲存的時候,不進行填充。當值儲存和檢索時尾部的空格仍保留。

text列不能有預設值,儲存或檢索過程中,不存在大小寫轉換.

當儲存的字元超過他們定義的長度時候,如果不是在sql伺服器的嚴格模式下,都會自動擷取合適的字段儲存,而不會出現錯誤。但是,如果是中文的話同樣要報錯誤:)比如定義char(4),然後insert (『c哈哈』).

注意一點的,char,varchar不像數值型別,有系統預設長度,所以必須在括號裡定義長度,可以有預設值

text不可以寫預設值,後面如果指定長度,不會報錯誤,但是這個長度是不起作用的,意思就是你插入資料的時候,超過你指定的長度還是可以正常插入

13樓:

char是一種固定長度的型別,varchar則是一種可變長度的型別,它們的區別是:

char(m)型別的資料列裡,每個值都占用m個位元組,如果某個長度小於m,mysql就會在它的右邊用空格字元補足.(在檢索操作中那些填補出來的空格字元將被去掉)在varchar(m)型別的資料列裡,每個值只占用剛好夠用的位元組再加上乙個用來記錄其長度的位元組(即總長度為l+1位元組).

在mysql中用來判斷是否需要進行對據列型別轉換的規則

1、在乙個資料表裡,如果每乙個資料列的長度都是固定的,那麼每乙個資料行的長度也將是固定的.

2、只要資料表裡有乙個資料列的長度的可變的,那麼各資料行的長度都是可變的.

3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約儲存空間,mysql會把這個資料表裡的固定長度型別的資料列轉換為相應的可變長度型別.

例外:長度小於4個字元的char資料列不會被轉換為varchar型別

C語言中char型別賦值時,0和0有何區別

char a 0 代表轉義字元表示空字元,char a 0對應ascii碼表上的空字元,都列印不出東西,兩者意義相同 型別上有差別 乙個是char 乙個是int 值相同 定義乙個char型別的初值需要加單引號嗎,char a 0 和char a 0 都是正確的嗎 兩種都可以 char a 0 將字元...

sql中varchar50代表什麼

此處自例子 sql server 對於字元型別的有 char 固定長度,儲存ansi字元,不足的補英文半形空格。nchar 固定長度,儲存unicode字元,不足的補英昌缺文半形空格 varchar 可變長度,儲存ansi字元,根據資料長度自動變化。nvarchar 可變長度,儲存unicode字元...

c語言有定義語句,C語言 有定義語句char a int b float c double d

首先,在c中,資料之間的運算必須是同型別的才能進行運算。如果型別不一致,就必須先轉換成相同的型別 由低級別 高階別轉換。資料型別級別由低到高分別為 char int float double。轉換時由低級別向高階別轉換。本題中,資料型別分別為 char型 int型 float型和double型。按照...