字符串类型
字符串分类
对于字符串,首先需要了解的是字符串的编码格式,数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集(UNICODE的UTF-8格式、GBK等)转换,即便是相同的字符,也可能会转换成不同的二进制编码。不同的编码格式可以说决定了字符串在数据库中的存储结构,例如,如果数据库的编码方式为GBK,那么中文占据2个字节,但是UTF-8一般占据3个字节。
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';查询数据库的编码格式;
字符串类型主要分为以下几类:
-
CHAR类型 定长字符串,会用空格填充来达到其最大长度。
CHAR类型最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTE) CHAR(12 CHAR),如果指定存储字符,实际存储时就是转换为对应编码格式的字节数,指定存储字符的方式更加直观,假设我们只想三个中文字符,直接写char(3 char)不用去计算需要多少个字节,省去一些计算的麻烦. -
VARCHAR2类型 变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。
VARCHAR2最多可以存储4,000字节的信息。 -
VARCHAR类型 目前是VARCHAR2的同义词,VARCHAR数据类型将计划被重新定义为一个单独的数据类型,与变长度字符串相比,具有不同的比较语义。所以最好不使用该类型。
-
NCHAR类型 这是一个包含UNICODE格式数据的定长字符串,也即是说它存储的字符串是运用UNICODE编码格式的,所有字符都用两个字节表示;
-
NVARCHAR2类型 包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。
如何选择字符串类型
- 数据长度一定,但是不包中文的,可以选择char类型。
- 数据长度一定,但可能包括中文,可以选择nchar类型。
- 数据长度不一定,存储只有英文、数字的最好用varchar
- 数据长度不一定,也有可能有中文,可以选择nvarchar类型
字符串函数
- 返回字符串首字母的ASCII码:ASCII(c);
- 返回数字对应的ASCII字符:CHR(n);
- 字符串的连接:concat(c1,c2);
- 字符串中每个单词首字母大写,其它字母小写返回,单词由空格,控制字符,标点符号限制:INITCAP©;
- 返回字符串的长度:LENGTH©
- 返回字符在字符串中首次出现的位置编号:INSTR(C1,[C2,[,j]])
- 返回小写字符: LOWER(C1)
- 返回大写字符:upper(c1)
- LTRIM(C1,C2)将字符串c1最左边的字符c2去掉,不包含C2则保持不变;
- replace(c1,c2[,c3]):用c3代替出现在c1中的c2返回;
- substr(c1,[,j]): 从第i位开始,截取长度为j的子字符串,如果j为空,则截取到字符串的尾部
- trim(c1)用于将字符串前后空格删除;
需要注意的点:对于定长的字符串,如果存储的字符串长度小于字符串设计的长度,会用空格填充,在我们取该字符串在后台程序中进行运用时,一般都需要在取数的时候就使用trim()函数取出该字符串前后的空格。