当前位置:首页 » 编程语言 » 可变长字符型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中使用固定长度字符和可变长度字符各有什么优点

各有各的好处,从存储空间来说可变长度字符比固定长度字符节省空间,但从速度来说,处理固定长度字符比可变长度字符的速度快,所以各有各的好处。