當前位置:首頁 » 編程語言 » 可變長字元型sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

可變長字元型sql

發布時間: 2023-03-07 19:18:51

❶ 請問sql資料庫中,能存放很長文本的欄位類型是什麼

BLOB :大數據類型,最大存儲65K,不可以被導出,只能在oracle資料庫中進行查看。

擴展: BLOB (binary large object),二進制大對象,是一個可以存儲二進制文件的容器。在計算機中,BLOB常常是資料庫中用來存儲二進制文件的欄位類型。

❷ SQL的數據類型

【三】SQL的數據類型(表的欄位類型)

3.1 四種基本的常用數據類型(表的欄位類型)

1、字元型,2、數值型,3、日期型,4、大對象型

3.1.1 字元型:

字元類型char和varchar2的區別

SCOTT@ prod> create table t1(c1 char(10),c2 varchar2(10));

SCOTT@ prod> insert into t1 values('a','ab');

SCOTT@ prod> select length(c1),length(c2) from t1; char和varchar2默認以byte為計算單位

LENGTH(C1) LENGTH(C2)

---------- ----------

10 2

3.1.2 數值型:

3.1.3 日期型:

系統安裝後,默認日期格式是DD-MON-RR, RR和YY都是表示兩位年份,但RR是有世紀認知的,它將指定日期的年份和當前年份比較後確定年份是上個世紀還是本世紀(如表)。

當前年份 指定日期 RR格式 YY格式

------------------------------------------------------------------------------

1995 27-OCT-95 1995 1995

1995 27-OCT-17 2017 1917

2001 27-OCT-17 2017 2017

2013 27-OCT-95 1995 2095

3.1.4 LOB型:

大對象是10g 引入的,在11g中又重新定義,在一個表的欄位里存儲大容量數據,所有大對象最大都可能達到4G。CLOB,NCLOB,BLOB都是內部的LOB類型,沒有LONG只能有一列的限制。

保存圖片或電影使用BLOB最好、如果是小說則使用CLOB最好。雖然LONG、RAW也可以使用,但LONG是oracle將要廢棄的類型,因此建議用LOB。

雖說將要廢棄,但還沒有完全廢棄,比如oracle 11g里的一些視圖如dba_views,對於text(視圖定義)仍然沿用了LONG類型。

Oracle 11g重新設計了大對象,推出SecureFile Lobs的概念,相關的參數是db_securefile,採用SecureFile Lobs的前提條件是11g以上版本,ASSM管理等,符合這些條件的。BasicFile Lobs也可以轉換成SecureFile Lobs。較之過去的BasicFile Lobs, SecureFile Lobs有幾項改進:

1)壓縮,2)去重,3)加密。

當create table定義LOB列時,也可以使用LOB_storage_clause指定SecureFile Lobs或BasicFile Lobs,而LOB的數據操作則使用Oracle提供的DBMS_LOB包,通過編寫PL/SQL塊完成LOB數據的管理。

3.2 數據類型的轉換

3.2.1 轉換的需求

什麼情況下需要數據類型轉換

1)如果表中的某欄位是日期型的,而日期又是可以進行比較和運算的,這時通常要保證參與比較和運算的數據類型都是日期型。

2)當對函數的參數進行抽(截)取、拼接,或運算等操作時,需要轉換為那個函數的參數要求的數據類型。

3)製表輸出有格式需求的,可將date類型,或number類型轉換為char類型

4)轉換成功是有條件的,有隱性轉換和顯性轉換兩種方式

3.2.2隱性類型轉換:

是指oracle自動完成的類型轉換。在一些帶有明顯意圖的字面值上,可以由Oracle自主判斷進行數據類型的轉換。

一般規律:

①比較、運算或連接時:

SQL> select empno,ename from emp where empno='7788'

empno本來是數值類型的,這里字元'7788'隱性轉換成數值7788

SQL> SELECT '12.5'+11 FROM al;

將字元型『12.5』運轉成數字型再求和

SQL> SELECT 10+('12.5'||11) FROM al;

將數字型11隱轉成字元與『12.5』合並,其結果再隱轉數字型與10求和

②調用函數時

SQL> select length(sysdate) from al;

將date型運轉成字元型後計算長度

③向表中插入數據時

create table scott. t1 (id int,name char(10),birth date);

insert into scott.t1 values('123',456,'2017-07-15');

按照欄位的類型進行隱式轉換

3.2.3 顯性類型轉換

即強制完成類型轉換(推薦),有三種形式的數據類型轉換函數:

TO_CHAR

TO_DATE

TO_NUMBER

1)日期-->字元

SQL> select ename,hiredate, to_char(hiredate, 'DD-MON-YY') month_hired from emp

where ename='SCOTT';

ENAME HIREDATE MONTH_HIRED

---------- ------------------- --------------

SCOTT 1987-04-19 00:00:00 19-4月 -87

fm壓縮空格或左邊的'0'

SQL> select ename, hiredate, to_char(hiredate, 'fmyyyy-mm-dd') month_hired from emp

where ename='SCOTT';

ENAME HIREDATE MONTH_HIRED

---------- ------------------- ------------

SCOTT 1987-04-19 00:00:00 1987-4 19

其實DD-MM-YY是比較糟糕的一種格式,因為當日期中天數小於12時,DD-MM-YY和MM-DD-YY容易造成混亂。

以下用法也很常見:

SQL> select to_char(hiredate,'yyyy') FROM emp;

SQL> select to_char(hiredate,'mm') FROM emp;

SQL> select to_char(hiredate,'dd') FROM emp;

SQL> select to_char(hiredate,'DAY') FROM emp;

2)數字-->字元:9表示數字,L本地化貨幣字元

SQL> select ename, to_char(sal, 'L99,999.99') Salary from emp where ename='SCOTT';

ENAME SALARY

---------- --------------------

SCOTT 3,000.00

以下四個語句都是一個結果:

SQL> select to_char(1890.55,'$99,999.99') from al;

SQL> select to_char(1890.55,'$0G000D00') from al;

SQL> select to_char(1890.55,'$99G999D99') from al;

SQL> select to_char(1890.55,'$99G999D00') from al; 9和0可用,其他數字不行

3)字元-->日期

SQL> select to_date('1983-11-12', 'YYYY-MM-DD') tmp_DATE from al;

4)字元-->數字:

SQL> SELECT to_number('$123.45','$9999.99') result FROM al;

使用to_number時如果使用較短的格式掩碼轉換數字,就會返回錯誤。不要混淆to_number和to_char轉換。

SQL> select to_number('123.56','999.9') from al;

報錯:ORA-01722: 無效數字

練習:建立t1表,包括出生日期,以不同的日期描述方法插入數據,顯示小於15歲的都是誰

SQL> create table t1 (id int,name char(10),birth date);

insert into t1 values(1,'tim',sysdate);

insert into t1 values(2,'brian',sysdate-365*20);

insert into t1 values(3,'mike',to_date('1998-05-11','yyyy-mm-dd'));

這一句也可以寫成insert into t1 values(3,'mike',to_date('1998-05-11')),因為'1998-05-11'是和當前日期格式匹配的。

insert into t1 values(4,'nelson',to_date('15-2月-12','dd-mon-rr'));

SQL> select * from t1;

ID NAME BIRTH

---------- ---------- -------------------

1 tim 2016-02-25 17:34:00

2brian 1996-03-01 17:34:22

3 mike 1998-05-11 00:00:00

4 nelson 2012-02-15 00:00:00

SQL> select name||'的年齡是'||to_char(months_between(sysdate,birth)/12,99) age from t1

where months_between(sysdate,birth)/12<15;

AGE

-------------------------

tim 的年齡是 0

nelson 的年齡是 4

the end !!!

@jackman 共築美好!

❸ 請問。sql中可變長度和固定長度的區別

字元串
如果規定只能輸入幾多個字元,用這個,節省資料庫容量,比如文章標題:char固定長度的非 Unicode 字元數據。
如果無法規定多少個字的標題,用這個,它為什麼不能作文章內容?因為它有限制多少位元組:varchar可變長度的非 Unicode 數據。
這個錄入文章內容最合適的了:text可變長度的非 Unicode 數據。

相關說明,可以查一查"SQL SERVER數據類型".

❹ SQL Server的常用數據類型(字元型)詳解

對於程序中的string型欄位,SQLServer中有char、varchar、nchar、nvarchar四種類型來對應(暫時不考慮text和ntext),開建立資料庫中,對這四種類型往往比較模糊,這里做一下對比。

定長或變長
所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度;有var前綴的,表示是實際存儲空間是變長的,比如varchar,nvarchar變長字元數據則不會以空格填充,比較例外的是,text存儲的也是可變長。
Unicode或非Unicode
資料庫中,英文字元只需要一個位元組存儲就足夠了,但漢字和其他眾多非英文字元,則需要兩個位元組存儲。如果英文與漢字同時存在,由於佔用空間數不同,容易造成混亂,導致讀取出來的字元串是亂碼。Unicode字元集就是為了解決字元集這種不兼容的問題而產生的,它所有的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。而前綴n就表示Unicode字元,比如nchar,nvarchar,這兩種類型使用了Unicode字元集。
基於以上兩點來看看欄位容量
char,varchar 最多8000個英文,4000個漢字
nchar,nvarchar 可存儲4000個字元,無論英文還是漢字

使用(個人偏好)
如果數據量非常大,又能100%確定長度且保存只是ansi字元,那麼char
能確定長度又不一定是ansi字元或者,那麼用nchar;
對於超大數據,如文章內容,使用nText
其他的通用nvarchar
char、varchar、nchar、nvarchar特點比較
CHAR
CHAR存儲定長數據很方便,CHAR欄位上的索引效率級高,比如定義char(10),那麼不論你存儲的數據是否達到了10個位元組,都要佔去10個位元組的空間。
VARCHAR
存儲變長數據,但存儲效率沒有CHAR高,如果一個欄位可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什麼"+1"呢?這一個位元組用於保存實際使用了多大的長度。
從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。
TEXT
text存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字元。
NCHAR、NVARCHAR、NTEXT
這三種從名字上看比前面三種多了個"N"。和char、varchar比較起來,nchar、nvarchar最多存儲4000個字元,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數據類型時不用擔心輸入的字元是英文還是漢字,較為方便,但在存儲英文時數量上有些損失。
所以一般來說,如果含有中文字元,用nchar/nvarchar,如果純英文和數字,用char/varchar

❺ SQL數據類型!

SQL字元類型介紹
一,名詞定義
char為 定長字元型,如char(10),你實際數據是『hello』,這時Sql Server 會自動補充空格,填滿10位。varchar:可變長字元,沒有上述問題,是多長就保存多長的數據。另外, char 和 varchar 在存儲數據時,每個英文字元和數字都佔一個位元組,而一個中文的字元會占兩個位元組.

nchar 與 nvarchar 的用法基本相同,只不過在存儲數據時採用的是 Unicode元碼, 一個英文字元和一個中文字元所佔的空間是相同的.都是兩個位元組.

二、名詞解釋
1、當使用非unicode時慎用以下這種查詢:
select f from t where f = N』xx』
原因:無法利用到索引,因為資料庫會將f先轉換到unicode再和N』xx』比較

2、char 和相同長度的varchar處理速度差不多(後面還有說明)

3、varchar的長度不會影響處理速度(看後面解釋)

4、索引中列總長度最多支持總為900位元組,所以長度大於900的varchar、char和大於450的nvarchar,nchar將無法創建索引

5、text、ntext上是無法創建索引的

6、O/R Mapping中對應實體的屬性類型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性來說,可變長度的類型更加吻合

7、一般基礎資料表中的name在實際查詢中基本上全部是使用like 『%xx%』這種方式,而這種方式是無法利用索引的,所以如果對於此種欄位,索引建了也白建

8、其它一些像remark的欄位則是根本不需要查詢的,所以不需要索引

9、varchar的存放和string是一樣原理的,即length {block}這種方式,所以varchar的長度和它實際佔用空間是無關的

10、對於固定長度的欄位,是需要額外空間來存放NULL標識的,所以如果一個char欄位中出現非常多的NULL,那麼很不幸,你的佔用空間比沒有NULL的大,這時候,你可以使用特殊標識來存放,如:』NV』

11、同上,所以對於這種NULL查詢,索引是無法生效的,假如你使用了NULL標識替代的話,那麼恭喜你,你可以利用到索引了

12、char和varchar的比較成本是一樣的,現在關鍵就看它們的索引查找的成本了,因為查找策略都一樣,因此應該比較誰佔用空間小。在存放相同數量的字元情況下,如果數量小,那麼char佔用長度是小於varchar的,但如果數量稍大,則varchar完全可能小於char,而且要看實際填充數值的充實度,比如說varchar(3)和char(3),那麼理論上應該是char快了,但如果是char(10)和varchar(10),充實度只有30%的情況下,理論上就應該是varchar快了。因為varchar需要額外空間存放塊長度,所以只要length(1-fillfactor)大於這個存放空間(好像是2位元組),那麼它就會比相同長度的char快了。

13、nvarchar比varchar要慢上一些,而且對於非unicode字元它會佔用雙倍的空間,那麼這么一種類型推出來是為什麼呢?對,就是為了國際化,對於unicode類型的數據,排序規則對它們是不起作用的,而非unicode字元在處理不同語言的數據時,必須指定排序規則才能正常工作,所以n類型就這么一點好處。

三、名詞總結
1、如果數據量非常大,又能100%確定長度且保存只是ansi字元,那麼char
2、能確定長度又不一定是ansi字元或者,那麼用nchar;
3、不確定長度,要查詢且希望利用索引的話,用nvarchar類型吧,將它們設到400;
4、不查詢的話沒什麼好說的,用nvarchar(4000)
5、性格豪爽的可以只用3和4,偶爾用用1,畢竟這是一種額外說明,等於告訴別人說,我一定需要長度為X位的數據
(這些字元型在網上都能搜索到的,搜搜看那,給你幾個網址:

http://blog1.poco.cn/myBlogDetail.htx&id=1619242&userid=40517719&pri=&n=0
http://www.w3school.com.cn/sql/sql_syntax.asp

❻ sql中使用固定長度字元和可變長度字元各有什麼優點

各有各的好處,從存儲空間來說可變長度字元比固定長度字元節省空間,但從速度來說,處理固定長度字元比可變長度字元的速度快,所以各有各的好處。