[转自:http://hi.baidu.com/bi_yutong/item/76c4e4ff4aba4aeb1b111f8e]
22.1 问题描述
或许你会说一个中文字符占2个字节,这是一定的?如何计算一个字符串的字节数?
22.2 解决方案
在oracle中一个字符特别是中文占几个字节是不同的。
比如我创立一个表create table test_ly(a varchar2(4),b nvarchar2(4))
你说a列能插入两个汉字吗?
错!最多能插入一个汉字加一个字母(或数字)。
这是为什么?因为一个汉字在a字段中占了3个字节,其他字符(比如数字或者字母或者英文标点符号)占1个字节,
你说b列最多能插入多少个汉字,2个?
错!b列最多能插入4个汉字,b列的一个汉字或者其他字符(比如数字或者字母或者英文标点符号)占2个字节。
由此可见,N开头的字段类型(比如NCHAR,NVARCHAR2)中,任何一个字符(包括一个汉字)占2个字节,统一的。
不以N开头的字段类型(比如CHAR,VARCHAR2)中,unicode字符(比如汉字)占3个字节,其他字符占1个字节。
如何求一个字符串占用的字符数和字节数?
Length 函数求得是占用字符数,lengthb或者vsize函数求得是占用字节数。
你说 中华12 这个字符串占用了多少字符,字节?看sql返回值便清楚了。
select length('中华12') from dual --返回4,也就是占用4个字符
select lengthb('中华12') from dual --返回8,也就是占用8个字节,其中中华儿子各占3个字节,而12两个字符各占一个字节
select lengthb(N'中华1') from dual --返回6,这是将字符串转换成为unicode字符串后,每个字符占用2个字节,3个就是6个字节
select length(N'中华1') from dual --返回3,因为只有3个字符嘛。
字符串类型字段默认的长度是以字节为单位的,具体取决于参数nls_length_semantics 的值(使用show parameters可以看到这个参数的值),默认是BYTE,也就是以字节为单位的,如果是CHAR则是以字符为单位的。表的某列可以使用字符为单位吗?当然可以,比如这样创建即可:create table test_ly(a varchar2(4 char)) 这样a列就最多能保存4个字符,而不是4个字节了
相关推荐
首先我想到的是采用检测每个字节ASCII的方式,这样的话需要写一个自定义函数,然后SQL中调用得到结果。但是感觉这个方法估计很耗时,毕竟每个字符都要比较,所以没有去实现。突然想到Oracle有一个编码转换的函数叫...
在 Oracle 中,CHAR 类型区分中英文,中文占两个字节,而英文占一个字节。因此,CHAR(20) 可以存储 20 个英文字符或 10 个中文字符。CHAR 类型适用于长度比较固定的,一般不含中文的情况。 二、VARCHAR 类型 ...
#### 一、Oracle字符集概述 在Oracle环境中,字符集用于定义如何表示和存储字符数据。一个完整的字符集由语言(Language)、地区(Territory)和编码(Charset)三部分组成。例如,`NLS_LANG=AMERICAN_AMERICA.ZHS...
- **单字节字符集(Single Byte Character Set, SBCS)**:每个字符由一个字节表示。 - **多字节字符集(Multi Byte Character Set, MBSCS)**:每个字符由多个字节表示。 - **Unicode字符集**:使用统一的编码标准来...
在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$SESSION`时。该错误的出现意味着在查询结果中存在一些多字节字符(通常是...
创建一个OracleCommand对象,并通过参数化方式将Byte[]数组作为参数传递给存储过程。 ```csharp OracleCommand cmd = new OracleCommand(); cmd.Parameters.Add(new OracleParameter("xxxx", bt)); ``` #### 2. ...
Oracle 字符集是一个字节数据的解释的符号集合,具有大小之分,具有相互的包容关系。Oracle 支持国家语言的体系结构允许使用本地化语言来存储、处理、检索数据。 一、什么是 Oracle 字符集 Oracle 字符集是一个...
Oracle字符集专题是一个深入探讨Oracle数据库字符集配置、管理和常见问题解决的综合资源。这个专题涵盖了从基础概念到实际操作的多个方面,旨在帮助用户全面理解并有效处理与Oracle字符集相关的各种问题。 首先,...
Oracle 字符集是数据库系统中一个至关重要的概念,它决定了数据如何被编码、存储和解析。Oracle 支持多种字符集,以满足不同地区和语言的需求。本文将深入探讨 Oracle 字符集的查看、修改以及相关知识。 首先,...
在 ORACLE 数据库中,汉字占用的字节数是一个常见的问题。根据数据库的字符集编码,一个汉字可以占用不同的字节数。在 AL32UTF8 或 UTF8 编码下,一个汉字通常占用 3 到 4 个字节,而在 ZHS16GBK 编码下,一个汉字...
在使用 JDBC(Java Database Connectivity)连接 Oracle 数据库时,可能会遇到一个常见的问题:从远程 Oracle 数据库获取的数据出现乱码现象。这种情况通常发生在远程 Oracle 数据库与本地 Oracle 数据库的字符集...
例如,一个汉字在单字节字符集(如US7ASCII)中占用2个字节,而在多字节字符集(如ZHS16GBK)中只占用1个字节。 - **客户端字符集**:决定了从数据库检索出的数据在客户端的应用程序中的显示形式。服务端和客户端...
由于历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle7.1),但有的用户从那时起就使用数据库了, 并用US7ASCII字符集存储了中文,或是有的用户在创建数据库时,不考虑清楚,随意选择一个默认的...
Oracle数据库支持多种字符集,包括单字节字符集(如ASCII)和多字节字符集(如UTF-8)。正确的字符集选择对于避免乱码、提高数据完整性以及优化性能具有重要意义。 ### 修改Oracle数据库字符集的原因及挑战 #### ...
- `ASCII(char)`: 获取`char`中第一个字符的ASCII值。 - `CHAR(number)`: 根据给定的ASCII值`number`返回相应的字符。 - `REPLACE(char,str1,str2)`: 将`char`中所有的`str1`替换为`str2`。 - `INSTR(char1,char...
- UTF-8 是一种变长多字节编码,可以用 1、2 或 3 个字节表示一个 Unicode 字符。 **3.4 字符集超级** 当一种字符集 A 的编码数值包含所有另一种字符集 B 的编码数值,并且两种字符集相同编码数值代表相同的字符...