1. 關於SQL資料庫字元和位元組 急!!!!!!
nvarchar 和 varchar 的區別是存儲方式不同
varchar是按位元組存儲的.而nvarchar是按字元存儲的
比如說 varchar(40),能存儲40個位元組長度的字元,存儲中文字元的時候,因為中文字元1個字元就等於2個位元組.所以varchar(40)只能存儲20個中文字元.
nvarchar(40),就可以存儲40個中文字元,也就是說可以存儲80個位元組長度的字元.nvarchar要相對於存儲的字元類型.比如有些字元是佔3個位元組的.
同樣的,char和nchar也一樣道理。
char是定長的,也就是當你輸入的字元小於你指定的數目時,char(8),你輸入的字元小於8時,它會再後面補空值。當你輸入的字元大於指定的數時,它會截取超出的字元。
varchar是變長型,它的存儲空間會跟你輸入的實際字元數而改變,但最大長度不能超過你指定的長度。
nvarchar是unicode的變長型,它和char的區別很明顯了,它和varchar的區別主要是存儲空間大,相同長度下能容內更多的字元。
2. 資料庫創建基本表時,char varchar 後面的6 20數字怎麼得來
這些都是預估值
比如id一般大眾做法是數字依次遞增,給6表明,數字長度對多為6,也就是說范圍在
1~999999之間,超過就會報錯,之所以給6一般認為,這個項目訪問數據量可能不會超過7位數,6位已經足夠滿足需要了,是這個意思,常見的位數還有11.
name欄位的20表明,按中文算,你只能最多輸入10個漢字或者20個字母,超出就報錯,一般我們的名字可能就三個字,但是有時會意外的出現多個字的名字,比如少數名族的名字,那就不能按3個漢字算了,設計者認為,10個漢字基本囊括了,絕大多數的情況,(注:1個漢字等於2個字元,漢字最大輸入數等於20/2=10個),city也是同理
3. oracle資料庫中varchar2(20 char)存儲10個漢字,會用空格填充嗎
varchar只對漢字和全形等字元占兩位元組,數字,英文字元等都是一個位元組。varchar2把空串等同於null處理,而varchar仍按照空串處理。varchar2把所有字元都占兩位元組處理(一般情況下),並且字元要用幾個位元組存儲,要看資料庫使用的字元集。
4. 資料庫一個字元是幾位
資料庫里的一個字元(java 中的 char)是 16 位2 位元組。如果是用 byte 存就佔一位元組 用 short 存是兩位元組,int 四位元組,long 是八位元組。
5. 資料庫中1位元組等於多少個字元
一個中文字元 = 2位元組
6. 關於SQL資料庫字元和位元組 急!!!!!!
nvarchar 和 varchar 的區別是存儲方式不同
varchar是按位元組存儲的.而nvarchar是按字元存儲的
比如說 varchar(40),能存儲40個位元組長度的字元,存儲中文字元的時候,因為中文字元1個字元就等於2個位元組.所以varchar(40)只能存儲20個中文字元.
nvarchar(40),就可以存儲40個中文字元,也就是說可以存儲80個位元組長度的字元.nvarchar要相對於存儲的字元類型.比如有些字元是佔3個位元組的.
同樣的,char和nchar也一樣道理。
char是定長的,也就是當你輸入的字元小於你指定的數目時,char(8),你輸入的字元小於8時,它會再後面補空值。當你輸入的字元大於指定的數時,它會截取超出的字元。
varchar是變長型,它的存儲空間會跟你輸入的實際字元數而改變,但最大長度不能超過你指定的長度。
nvarchar是unicode的變長型,它和char的區別很明顯了,它和varchar的區別主要是存儲空間大,相同長度下能容內更多的字元。
7. VARCHAR2(20)可以存儲多少個數字
20個數字。
4.0版本以下,varchar(20),指的是20位元組。如果存放數字時,只能存20個(每個數字1位元組)。如果存放UTF8漢字時,只能存33個(每個漢字3位元組) 。
5.0版本以上,varchar(20),指的是20字元。無論存放的是數字、字母還是UTF8漢字(每個漢字3位元組),都可以存放100個, VARCHAR(M)類型的列最多可以佔用65535個位元組。
如果插入字元超過21個,則報錯[Err]1406-Datatoolongforcolumn'string'atrow1
可見MySQL的varchar(n)可以存儲的中文字元數和英文字元數是一致的,都是n個字元。
(7)資料庫20字元對應多少字元擴展閱讀:
示例:以5.0以上版本為例。
新建表:
CREATE TABLE varchar_test (`id` int(11) NOT NULL ,`string` varchar(20)) ENGINE=InnoDBDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
插入數據:
INSERT INTO varchar_test (id, string) VALUES (1, '一二三四五六七八九十');
INSERT INTO varchar_test (id, string) VALUES (2, '一二三四五六七八九十一二三四五六七八九十');
INSERT INTO varchar_test (id, string) VALUES (3, '12345678901234567890');
測試結果:
1:一二三四五六七八九十
2:一二三四五六七八九十一二三四五六七八九十
3:12345678901234567890
8. 資料庫中一個漢字占幾個字元
如果你說的「字元」就是指 Java 中的 char,那好,那它就是 16 位,2 位元組。
如果你說的「字元」是指我們用眼睛看到的那些「抽象的字元」,那麼,談論它占幾個位元組是沒有意義的。具體地講,脫離具體的編碼談某個字元占幾個位元組是沒有意義的。
就好比有一個抽象的整數「42」,你說它占幾個位元組?這得具體看你是用 byte,short,int,還是 long 來存它。
用 byte 存就佔一位元組,用 short 存就占兩位元組,int 通常是四位元組,long 通常八位元組。
當然,如果你用 byte,受限於它有限的位數,有些數它是存不了的,比如 256 就無法放在一個 byte 里了。
字元是同樣的道理,如果你想談「占幾個位元組」,就要先把編碼說清楚。同一個字元在不同的編碼下可能占不同的位元組。
就以你舉的「字」字為例,「字」在 GBK 編碼下占 2 位元組,在 UTF-16 編碼下也占 2 位元組,在 UTF-8 編碼下占 3 位元組,在 UTF-32 編碼下占 4 位元組。不同的字元在同一個編碼下也可能占不同的位元組。
「字」在 UTF-8 編碼下佔3位元組,而「A」在 UTF-8 編碼下占 1 位元組。(因為 UTF-8 是變長編碼),而 Java 中的 char 本質上是 UTF-16 編碼。而 UTF-16 實際上也是一個變長編碼(2 位元組或 4位元組)。
如果一個抽象的字元在 UTF-16 編碼下占 4 位元組,顯然它是不能放到 char 中的。換言之, char 中只能放 UTF-16 編碼下只佔 2 位元組的那些字元。而 getBytes 實際是做編碼轉換,你應該顯式傳入一個參數來指定編碼,否則它會使用預設編碼來轉換。
你說「 new String("字").getBytes().length 返回的是3 」,這說明預設編碼是 UTF-8.
如果你顯式地傳入一個參數,比如這樣「 new String("字").getBytes("GBK").length 」,那麼返回就是 2。你可以在啟動 JVM 時設置一個預設編碼,假設你的類叫 Main,那麼在命令行中用 java 執行這個類時可以通過 file.encoding 參數設置一個預設編碼。
比如這樣:java -Dfile.encoding=GBK Main
這時,你再執行不帶參數的 getBytes() 方法時,new String("字").getBytes().length 返回的就是 2 了,因為現在預設編碼變成 GBK 了。
當然,如果這時你顯式地指定編碼,new String("字").getBytes("UTF-8").length 返回的則依舊是 3.
否則,會使用所在操作系統環境下的預設編碼。
通常,Windows 系統下是 GBK,Linux 和 Mac 是 UTF-8.
但有一點要注意,在 Windows 下使用 IDE 來運行時,比如 Eclipse,如果你的工程的預設編碼是 UTF-8,在 IDE 中運行你的程序時,會加上上述的 -Dfile.encoding=UTF-8 參數,這時,即便你在 Windows 下,預設編碼也是 UTF-8,而不是 GBK。
由於受啟動參數及所在操作系統環境的影響,不帶參數的 getBytes 方法通常是不建議使用的,最好是顯式地指定參數以此獲得穩定的預期行為。
9. 資料庫中1-1000之間字元編碼是多少
一位數1個,兩位數的話十位有10個1,個位有9個1,三位數百位有100個1,十位有90個1,個位有90個1,再加上1個四位數,一共是1+10+9+100+90+90+1=301個1。
ASCII碼中,一個英文字母(不分大小寫)佔一個位元組的空間,一個中文漢字占兩個位元組的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0,最大值255。
字元編碼
也稱字集碼,是把字元集中的字元編碼為指定集合中某一對象(例如:比特模式、自然數序列、8位組或者電脈沖),以便文本在計算機中存儲和通過通信網路的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其它符號編號,並用7比特的二進制來表示這個整數。通常會額外使用一個擴充的比特,以便於以1個位元組的方式存儲。
10. mysql 資料庫varchar可以存儲多少個漢字和多少個數字
4.0版本以下,varchar(50),指的是50位元組,如果存放UTF8漢字時,只能存16個(每個漢字3位元組) 5.0版本以上,varchar(50),指的是50字元,無論存放的是數字、字母還是UTF8漢字(每個漢字3位元組),都可以存放50個 其實最好的辦法是在自己資料庫中建個表試試可以放多少漢字,現在mysql都5.0已上了,varchar(50)是可以存50個漢字的
具體還是要看版本的:
4.0版本以下,varchar(100),指的是100位元組,如果存放UTF8漢字時,只能存33個(每個漢字3位元組)
5.0版本以上,varchar(100),指的是100字元,無論存放的是數字、字母還是UTF8漢字(每個漢字3位元組),都可以存放100個。