Oracle Length 和 Lengthb 函数说明

一.官网的说明

http://download.oracle.com/docs/cd/E11882_01/server.112/e26088/functions088.htm#SQLRF00658

Purpose

TheLENGTHfunctionsreturn the length ofchar.LENGTHcalculates length usingcharacters as defined by the input character set.

--返回以字符为单位的长度.

LENGTHBusesbytes instead of characters.

--返回以字节为单位的长度.

LENGTHCusesUnicode complete characters.

--返回以Unicode完全字符为单位的长度.

LENGTH2usesUCS2 code points.

--返回以UCS2代码点为单位的长度.

LENGTH4usesUCS4 code points.

--返回以UCS4代码点为单位的长度.

charcan beany of the data typeschar,varchar2,nchar,nvarchar2,clob,ornclob.

The exceptionsareLENGTHC,LENGTH2, andLENGTH4, which do not allow chartobe aCLOBorNCLOB. The return value is of data typeNUMBER.Ifcharhas data typeCHAR, then the length includes all trailingblanks. Ifcharis null, then this function returns null.

Restriction on LENGTHB(Lengthb函数的限制)

TheLENGTHBfunctionis supported for single-byte LOBs only. It cannot be used withCLOBandNCLOBdatain a multibyte character set.

Examples

The followingexample uses theLENGTHfunction using a single-byte databasecharacter set:

SELECT LENGTH('CANDIDE') "Length incharacters" FROM DUAL;

Length in characters

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

7

The next example assumes a double-bytedatabase character set.

SELECT LENGTHB ('CANDIDE') "Length inbytes" FROM DUAL;

Length in bytes

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

14

二.示例说明

在不同的数据库,因为字符集的不同,LENGTHB得到的值可能会不一样。如ZHS16GBK采用两个byte位来定义一个汉字。而在UTF8,采用3个byte。

SYS@anqing1(rac1)> SELECT USERENV('LANGUAGE') FROM DUAL;

USERENV('LANGUAGE')

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

AMERICAN_AMERICA.ZHS16GBK

SQL>select length('安庆') from dual;

2

SQL>select lengthb('安庆') from dual;

4

SQL>select length('AnQing') from dual;

6

SQL>select lengthb('AnQing') from dual;

6

通过这个示例,我们可以看出来,Length 和 Lengthb 函数的一个重要用处,就是用来判断记录值里是否有中文内容。

如果有中文,那么Length() != Lengthb()

如果没有中文,那么Length() == Lengthb()

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

Blog: http://blog.youkuaiyun.com/tianlesoftware

Weibo: http://weibo.com/tianlesoftware

Email: dvd.dba@gmail.com

DBA1 群:62697716(满); DBA2 群:62697977(满)DBA3 群:62697850(满)

DBA 超级群:63306533(满); DBA4 群:83829929(满) DBA5群: 142216823(满)

DBA6 群:158654907(满) DBA7 群:69087192(满)DBA8 群:172855474

DBA 超级群2:151508914 DBA9群:102954821 聊天 群:40132017(满)

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

### MySQL OracleLENGTH 函数的差异及用法比较 在 MySQL Oracle 数据库中,`LENGTH` 函数用于计算字符串的字节数。然而,两者的实现方式适用场景存在一定的差异。 #### 1. **MySQL 中的 LENGTH 函数** 在 MySQL 中,`LENGTH()` 函数用于返回字符串的字节数[^2]。这意味着如果字符串包含多字节字符(如 UTF-8 编码中的汉字),每个字符可能占用多个字节。例如,一个汉字通常占用 3 个字节(在 UTF-8 编码下)。因此,`LENGTH()` 的结果可能与字符串的实际字符数不同。 ```sql SELECT LENGTH('你好') AS byte_length; -- 结果为 6,因为每个汉字占用 3 个字节 ``` 此外,MySQL 还提供了 `CHAR_LENGTH()` 函数,用于返回字符串的字符数,而不是字节数。这在处理多字节字符时尤为重要。 ```sql SELECT CHAR_LENGTH('你好') AS char_length; -- 结果为 2,因为有两个字符 ``` #### 2. **Oracle 中的 LENGTH 函数** 在 Oracle 数据库中,`LENGTH()` 函数的行为与 MySQL 类似,也用于返回字符串的字节数[^2]。然而,Oracle 提供了更多的相关函数来处理不同的需求: - **`LENGTHB()`**:返回字符串的字节数,类似于 MySQL 的 `LENGTH()`。 - **`LENGTHC()`**:返回字符串的字符数,类似于 MySQL 的 `CHAR_LENGTH()`。 - **`LENGTH2()`**:返回字符串的 UCS2 字符数。 - **`LENGTH4()`**:返回字符串的 UCS4 字符数。 例如,在 Oracle 中计算字符串的字节数可以使用以下语句: ```sql SELECT LENGTHB('你好') AS byte_length FROM dual; -- 结果为 6 ``` #### 3. **主要差异总结** - **函数名称**:两者都使用 `LENGTH()` 函数来计算字符串的字节数,但在 Oracle 中有更多变体(如 `LENGTHB()`、`LENGTHC()` 等)以满足不同的需求。 - **多字节字符支持**:MySQL Oracle 都正确处理多字节字符,但 MySQL 使用 `CHAR_LENGTH()` 来计算字符数,而 Oracle 提供了多种函数(如 `LENGTHC()`)来实现类似功能。 - **扩展性**:Oracle 提供了更丰富的字符串长度计算函数,能够适应不同的字符集编码需求。 #### 4. **示例代码对比** 以下是 MySQL Oracle 中 `LENGTH` 函数的简单对比示例: **MySQL 示例**: ```sql SELECT LENGTH('你好') AS byte_length, CHAR_LENGTH('你好') AS char_length; -- 结果:byte_length = 6, char_length = 2 ``` **Oracle 示例**: ```sql SELECT LENGTHB('你好') AS byte_length, LENGTHC('你好') AS char_length FROM dual; -- 结果:byte_length = 6, char_length = 2 ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值