字符数据类型

结论一:

在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔门的理由。 首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

结论二:

问题1:Oracle中为什么字符串类型为varchar2,它与varchar有什么关系? 回答: 在Oracle中, varchar已经作为了保留字。如果你使用varchar类型,Oracle也不会报错,但是建表以后你会发现,已经自动变为了varchar2类型。

问题2: 用number还是用integer(整数)? 比如说number(4,3)跟(3,4)有什么区别? 还有number(3,-3) 为什么没有小数?

回答: 另外Oracle也有integer等其它类型,但是用integer有缺点,就是不知道其长度,在不同的操作系统上所分配的长度是不同的。而用number,指定多少,就永远是多少,一切掌握在自己手中。

1、number(4,3)是表示 这个数 一共有4位是有效位,后面的3 表示有3个是小数 也就是这个数 只能是1.234,这样格式的 最大只能是9.999;

2、number(3,4) 表示这个数 有效位数是3位 但是有四位小数 也就是只能是这个格式0.0123 最大只能是0.0999;

3、number(3,-3) 就是这个数有效位数一共3位,如果是正3 则是3位小数 如果是负数的话就是3 位整数 也就是123这个格式 最大只能是999;

4、还有这样的 number(2,-3) 就是这个数的有效位数是2位 但是有三位整数 所以只能是230 这样的 最大是990;

问题3: 如何为字符串和数字类型指定长度? 回答: char类型可以不指定长度,则默认为1,而varchar2必须指定长度。 char和varchar类型的长度最大长度大约在4000多一点点。 number表示不限整数或小数,它能够保存非常大的数字或者保存小数位非常多的数字。

问题4: 字符串最大长度约为4000。如果要保存更多的内容怎么办?

解决的方法有两种。第一种是用大对象类型,即CLOB或者BLOB类型,但是编程比较麻烦;第二种是用一对多的父子表实现(看例子)。 大对象是指大量的数据。如果用char或varchar2,列的最大长度大约在4000多;如果内容更多,其中一个方法就是将列设置为CLOB类型,但是只限制保存字符数据,如小说。如果是二进制数据,如图片、声音、office文档,则需要将列设置BLOB类型。CLOB或BLOB最大能够装4G的内容。如果是电影,则更通常的做法是在表中保存电影的名称、路径等信息,电影直接保存在磁盘上,而不是直接存储在数据库中,也不是用BFile类型 示例:创建小说表 create table xiao_shuo( xs_id number(10) primary key, --小说编号 xs_name varchar2(5), --小说名称 xs_contenct clob, --小说内容 xs_fen_mian blob --小说封面(图片) ); 第二种是利用父子表实现,例如:小说表(小说ID,小说标题),内容表(小说ID,行数,行内容),

主键字段类型的选择: 数据库表的主键生成机制有多种选择:Sequence、产品自增长、表自增长、UUID、复合主键。从主键单纯性和查询简单性考虑,首先不建议使用复合主键。从数据表重建和数据迁移的方便性考虑,首选UUID,但使用UUID就必须使用字符类型字段。

复合主键也叫联合主键,建议不使用联合主键,而是将唯一的,和业务无关的字段(比如mysql的自增字段)作为主键,而将业务相关的字段作为unique key,主键还是独立起来好,不要和业务撤上关系。

时间: 2024-10-07 02:27:56

字符数据类型的相关文章

java基础随笔 字符数据类型char的单引号

public class Love{ public static void main(String[] args){ System.out.println('*'+'\t'+'*'); System.out.println("*"+"\t"+"*") } } 运行结果   第一行为  93 第二行为  *        * 原因 第一行中'\t' 单引号  识别为字符数据类型char,char类型是可以运算的,在第一行中+做了运算符. 第二行&q

MySql中的字符数据类型

MySql中的varchar类型 1.varchar类型的变化 MySQL数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255根据不同版本数据库来定.在MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可 以存放65532个字节的数据, 起始位和结束位占去了3个字节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文

js获取字符串最后一个字符代码

方法一:运用String对象下的charAt方法 charAt() 方法可返回指定位置的字符. 代码如下 复制代码 str.charAt(str.length – 1) 请注意,JavaScript 并没有一种有别于字符串类型的字符数据类型,所以返回的字符是长度为 1 的字符串 方法二:运用String对象下的substr方法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符. 代码如下 复制代码 str.substr(str.length-1,1) 重要事项:EC

sql数据类型

目前在重构机房收费系统,本想总结一下遇到的错误,但是一些错误,自己目前还处于混乱状态,so,那就总结一下别的. 在重构的时候我们与数据库会经常打交道,那么尤其是数据类型尤为重要,下面是整理的一些关于SQL Server中的数据类型. 一. 整数数据类型 整数数据类型是最常用的数据类型之一. 1.INT (INTEGER) INT (或INTEGER)数据类型存储从-2的31次方 (-2 ,147 ,483 ,648) 到2的31次方-1 (2 ,147 ,483,647) 之间的所有正负整数.每

SQL Server 2008数据类型

在创建表时,必须为表中的每列指派一种数据类型.本节将介绍SQL Server中最常用的一些数据类型.即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型.例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型. CREATE TYPE Address FROM varchar(35) NOT NULL 如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数

数据类型详解

(1)整数型整数包括bigint.int.smallint和tinyint,从标识符的含义就可以看出,它们的表示数范围逐渐缩小.lbigint:大整数,数范围为-263(-9223372036854775808)-263-1(9223372036854775807),其精度为19,小数位数为0,长度为8字节.lint:整数,数范围为-231(-2,147,483,648)-231-1(2,147,483,647),其精度为10,小数位数为0,长度为4字节.lsmallint:短整数,数范围为-2

关于BSTR数据类型

关于BSTR数据类型 - 极品垃圾 - C++博客 http://www.cppblog.com/bestcln/articles/82712.html 1.COM字符串类型字符串的长度可能互不相同,因此跨COM边界传输特定的字符串时,需要确定它的长度,而且,字符串有时需要 分配内存. 2.Unicode和ANSI数据类型 3.OLECHAR,LPOLESTR,LPCOLESTRCOM的基本字符数据类型是OLECHAR,与平台无关的字符表示法.在创建该字符集时,OLECHAR的基本数据类型随操

c语言数据库数据类型

数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多种数据类型,包括字符类型.数值类型以及日期类型等.数据类型相当于一个容器,容器的大小决定了装的东西的多少,将数据分为不同的类型可以节省磁盘空间和资源. ??Sql Server 还能自动限制每个数据类型的取值范围,例如定义了一个类型为int的字段,如果插入数据时插入的值的大小在smallint或者tinyint范围之内, Sql Server 会自动将类型转换为smallint 或者tinyint,这样一来,在存储数

CAST CONVERT转换日期和时间数据类型

1 USE AdventureWorks2008R2; 2 GO 3 --CAST 4 5 SELECT 'CAST' "CAST", 6 CAST('1990-11-1' AS VARCHAR(10)) 转为字符串, 7 CAST('1990-11-1' AS DATETIME) 转为日期 8 9 --CONVERT 10 SELECT 'CONVERT' "CONVERT", 11 CONVERT(VARCHAR(10),'2999') 转为字符串, 12 CO