`

Oracle如何正确判断带中文的字符串长度

阅读更多
  The "length" functions return the length of char.
      LENGTH calculates length using characters as defined by the input character set.
      LENGTHB uses bytes instead of characters.
      LENGTHC uses Unicode complete characters.
      LENGTH2 uses UCS2 codepoints.
      LENGTH4 uses UCS4 codepoints

 

  length函数返回字符的长度,它使用定义好的输入的字符集计算长度.
  lengthb使用bytes代替字符
  VSIZE returns the number of bytes in the internal representation of expr.
  vsize 返回内部表示的字节的数目。
internal representation of expr谁能解释一下。

 

  看sql示例:
  select length('adfad合理') "bytesLengthIs" from dual --7
  select lengthb('adfad') "bytesLengthIs" from dual --5
  select lengthb('adfad合理') "bytesLengthIs" from dual --11
  select vsize('adfad合理') "bytesLengthIs" from dual --11
  select lengthc('adfad合理')"bytesLengthIs" from dual --7

 

  结论:
     在utf-8的字符集下
  lengthb=vsize
  lengthc=length

  疑问:中文字符怎么会占用了3个byte?而不是2个。是utf-8字符集的原因?

  谁知道??????

  参考文献:Oracle9i SQL Reference Release 2 (9.2)

  ..................................................

  用String的getBytes方法测试了一下.
  结论是utf-8的中文字符占用3个字节,gbk的中文字符占用2个字节,iso-8859-1的中文字符被识别为占用2个字节,iso不支持中文字符的编码,应该是都当成某个拉丁字母了.Oracle没有关系,oracle只是负责存储数据.
  可以先用 select * from v$nls_parameters 看看oracle的字符集

 

下边是测试的java类:

import java.io.UnsupportedEncodingException; 

public class TextEncoding { 
  /** 
   * 
   * @author:sunflower 
   * @date: 2007-1-24 上午10:09:40 
   * @todo: 调用的是String的自己的getBytes(encoding)方法, 
   * 使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中. 
   * @param content 
   * @param encode 
   * @return 
   */ 
  public static byte[] getBytes(String content,String charsetName) 
     throws UnsupportedEncodingException{ 
     return content.getBytes(charsetName); 
  } 

  /** 
   * 
   * @author:sunflower 
   * @date: 2007-1-24 上午10:19:40 
   * @todo: 调用的是String的自己的getBytes()方法, 
   * 使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。 
  * @param content 
   * @return 
   */ 
  public static byte[] getBytes(String content){ 
      return content.getBytes(); 
  } 

  public static void main(String[]args){ 
      String content="1e宝宝"; 
      byte[] len; 
      try{ 
          len=getBytes(content,"UTF-8"); 
          System.out.println(" the byte array length is "+len.length); 
          len=getBytes(content,"GBK"); 
          System.out.println(" the byte array length is "+len.length); 
          len=getBytes(content,"ISO-8859-1"); 
          System.out.println(" the byte array length is "+len.length); 
      }catch(Exception e){ 
          System.out.println("Can 't recognize"); 
      } 

      // System.out.println("the content byte[] length is "+); 
  } 

}

 输出 :

the byte array length is 8
the byte array length is 6
the byte array length is 4

 

分享到:
评论

相关推荐

    Oracle 验证是否是日期

    本文将详细介绍一个自定义的Oracle函数`FN_ISDATE_JAVA`,该函数用于判断给定的字符串是否能够转换为有效的日期格式。 #### 函数概述 函数`FN_ISDATE_JAVA`的主要功能是验证输入的字符串是否符合日期格式...

    oracle过滤数字

    - `>= 1`:确保过滤后得到的字符串长度大于等于1,即至少包含一个数字字符。 #### 三、进阶技巧与注意事项 - **多条件组合**:在实际应用中,可能需要同时考虑多个条件。例如,在上述示例的基础上,还可以加入对`...

    oracle求字符串长度函数length()和hengthb()简介

    在Oracle数据库中,处理字符...希望本文对理解Oracle中的字符串长度计算有所帮助,对于更深入的Oracle知识,如数据库启动阶段分析、RMAN自动备份控制文件的方法以及Oracle EBS工具的使用,读者可以进一步探索相关资料。

    oracle函数字符处理

    Oracle提供了一系列强大的函数,帮助用户对字符串进行各种操作,如查找、替换、截取、转换等。以下是一些重要的Oracle字符处理函数的详细说明: 1. **SUBSTR()** 函数:用于从字符串中提取子串。例如,`SUBSTR...

    Oracle实现身份证校验功能

    -- 去除输入字符串的空格 l_card_number := TRIM(p_card_number); -- 获取最后一位校验码 l_card_last := TRIM(SUBSTR(l_card_number, 18, 1)); -- 检查长度是否正确 IF LENGTH(l_card_number) <> 18 THEN ...

    j2me自动分割换行字符串

    因此,需要根据当前设备的屏幕宽度,对字符串进行自动分割,使其能够正确换行显示。具体来说,需要解决以下问题: - 如何确定字符串的分割点? - 如何根据屏幕宽度动态调整分割位置? - 如何控制最大显示行数? ##...

    oracle财务数字转换中文

    - `l_unit`:存储中文大写单位的字符串。 - `l_in`:存储待转换的输入值。 - `l_out`:存储转换后的中文大写金额。 - `l_tab`:实例化`t_tab`类型的表,用于存放各个数字位对应的中文大写单位。 - `l_isminus`:布尔...

    oracle身份证验证函数

    通过上述详细的分析可以看出,`Func_checkIdcard`函数综合运用了Oracle数据库的各种功能,包括字符串处理、数学运算以及条件判断等,实现了对中国居民身份证号码的有效验证。这个函数不仅能够处理不同长度的身份证...

    Oracle SQL 内置函数大全(3)

    11. **DUMP(expression, fmt, start, length)**:这个函数返回一个字符串,包含表达式`expression`的内部表示,包括类型、长度和字符集等信息。`fmt`参数用于指定输出的格式,`start`和`length`用于指定要分析的字符...

    ORACLE与SQLSERVER语法差异分析

    - SQL SERVER中,`LEN()`函数也返回字符串长度,但它不包括尾部的空格。 4. **判断空值**: - ORACLE的`NVL()`函数用于处理NULL值,如果表达式的结果是NULL,则返回第二个参数的值。 - SQL SERVER使用`ISNULL()`...

    oracle认证的java考试(22)

    通过此方法,可以有效地判断字符串的有效性并输出相关信息。 综上所述,本次考试覆盖了 Java 中静态导入以及条件判断和字符串处理的相关知识点,对于理解 Java 语言的基本语法和编程实践具有重要意义。

    ORACLE_FUNCTION.rar_oracle

    此外,LPAD和RPAD用于在字符串左侧或右侧填充字符以达到指定长度。 四、日期时间函数 Oracle提供了丰富的日期时间函数,如SYSDATE获取当前系统日期,ADD_MONTHS增加或减少月份,EXTRACT用于提取日期或时间元素,TO_...

    oracle和MySQL区别手册

    - **MySQL**: 使用`VARCHAR(n)`来定义可变长度的字符串类型,与Oracle类似,这里的`n`同样表示最大字符数。 ##### 日期类型 - **Oracle**: 使用`DATE`类型来存储日期和时间信息(包括年、月、日、小时、分钟和秒)...

    oracle函数.pdf

    Oracle提供了大量的内置函数,用于实现各种操作,如字符串处理、数学计算、日期时间处理、转换、序列生成等。以下是一些Oracle函数的详细知识点: 1. 字符串处理函数: - TO_CHAR: 将数据类型(如日期、数字)转换...

    ORACLE函数大全.zip

    - `LENGTH`:返回字符串的长度。 - `UPPER`和`LOWER`:分别将字符串转换为大写和小写。 5. **聚合函数**: - `COUNT`:计算行的数量。 - `SUM`:计算数值列的总和。 - `AVG`:计算平均值。 - `MAX`和`MIN`:...

    oracle最常用的函数或方法总结

    - `SUBSTR()`:从字符串的指定位置截取指定长度的子串。 - `INSTR()`:查找字符串中指定字符或子串的位置。 - `UPPER()` 和 `LOWER()`:将字符串转换为大写或小写。 - `TRIM()`:去除字符串首尾的空格或指定字符...

    oracle函数

    2. **字符串函数**:如SUBSTR()用于提取字符串的一部分,LENGTH()用于计算字符串长度,UPPER()和LOWER()用于转换大小写,REPLACE()用于替换字符串中的特定字符。 3. **日期和时间函数**:SYSDATE获取当前系统日期,...

    Oracle正则表达式详解(用法+实例)

    - **功能**: 类似于 `LIKE` 函数,用于判断字符串是否符合指定的正则表达式模式。 - **语法**: ```sql REGEXP_LIKE(expr, pattern [, match_parameter]) ``` - **示例**: - 查询以 "1" 开头且以 "60" 结尾的长度...

    oracle小写人名币转大写人名币函数

    - 最终将转换好的汉字金额字符串返回。 ### 示例应用 为了更好地理解该函数的用法,我们可以举一个简单的例子: 假设需要将123456.78转换为大写形式: - 执行`SELECT rmb(123456.78) FROM dual;` - 假设返回结果为...

Global site tag (gtag.js) - Google Analytics