Oracle汉字占用字节数的问题

在oracle中一个字符特别是中文字符占几个字节是与字符集有关的。

比如GBK,汉字就会占两个字节,英文1个;如果是UTF-8,汉字一般占3个字节,英文还是1个。但是一般情况下,我们都认为是两个字节处理,因为oracle安装时候默认我们都选择GBK的编码格式,但是我们在页面做输入字符串长度的校验的时候,还是以数据库设计字段最大长度除3来作为最大长度-----防止数据库移植时设置不同编码格式。

查看字符串占用的字符数:

select length(‘12中华‘) from dual;     --4

查看字符串占用的字节数:

select lengthb(‘12中华‘) from dual;   --8

nvarchar2的一个汉字字符都是占用两个字节的,与字符集无关:

select length(N‘中华1‘) from dual;     --3

select lengthb(N‘中华1‘) from dual;   --6

补充:

(1)

查询字符集语句: select userenv(‘language‘) from dual;    (SIMPLIFIED CHINESE_CHINA.AL32UTF8)

查询结果分为三部分: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集), 其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集 。

(2)如何查看Oracle的字符集,日期格式,语言等?

SYS>show parameter nls;    --得不到具体全面的value

SYS>select * from nls_database_parameter;   --nls_database_parameter表才是最详细的

时间: 2024-08-10 21:19:38

Oracle汉字占用字节数的问题的相关文章

oracle汉字占用字节长度

1.        今天调查一个oracle数据库问题的时候,发现在11g中一个汉字占2个字节,在10g中占3个字节,导致将11g数据库中的数据导入到10g的时候总是出错,开始的时候还以为是11g和10g的版本不一样,汉字占用字节数不一样,后来一想,oracle不会这么干吧,那样差别也太大了,后来一调查,发现是跟oracle的字符集编码有关: 如果是以下字符集,一个汉字占用2个字节:      SIMPLIFIED CHINESE_CHINA.ZHS16GBK 如果是以下字符集,一个汉字占用3个

【C语言】结构体占用字节数及存储与空间分配

我们都知道在数据类型中,char类型占1个字节,short占2个字节,int占4个字节,long占8个字节等等. 在计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小,下面我们看几个例子: 1. struct A { char a; int b; short c; }str1; 这里char占1个字节,int占4个字节,short占2个字节,按单元存放如下图: 1 2 3 4 a       b b b b c c     由于a占

占用字节数求法

字符串占用字节数:● Ansi:char szStr[] = "abc";占用字节数求法:sizeof(szStr); char *psz = "defgh";占用字节数求法:strlen(psz)*sizeof(char); ● Unicode:wchar_t szwStr[] = L"abc";占用字节数求法:sizeof(szwStr); wchar_t *pwsz = L"defgh";占用字节数求法:wcslen(p

Java基本类型占用字节数(或 bit数)

背景:面试时候问到int类型占用几个字节,以及表示的大小,居然一脸懵逼,任何细节都不能放过. Java基本类型占用字节数(或 bit数) java是跨平台的语言,所以不论在什么系统中这些东西在内存中所占空间都是相同的 原文地址:https://www.cnblogs.com/lixuwu/p/10612553.html

JDBC读取Oracle的US7ASCII编码中文乱码及不同编码下汉字占用字节的问题

数据库版本号:Oracle 10g 字符集:SIMPLIFIED CHINESE_CHINA.US7ASCII JDK:1.6.0_45 Oracle驱动:ojdbc14.jar 使用JDBC操作数据库,获取连接.运行SQL没有问题.可是,查询出来的结果中,全部汉字,均显示为乱码. debug查看到在数据从数据库中获取出来的时候,就已经是乱码,而使用PL/SQL等工具,均显示正常. 不知是否Oracle的驱动,在进行汉字处理的时候,使用了系统默认的字符集?此时,本着死马当活马医的理念,使用下对汉

java中各种数据类型占用字节数

1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字符是不一样的,并且与编码有关 英文字母:A 字节数 编码 1 GB2312 1 GBK 1 GB18030 1 ISO-8859-1 1 UTF-8 4 UTF-16 2 UTF-16BE 2 UTF-16-LE 中文汉字:我 字节数 编码 1 GB2312 2 GBK 2 GB18030 1 IS

java中基本类型占用字节数 (面试总问)

在移动开发中由于移动设备内存的局限性,往往需要考虑使用的数据类型所占用的字节数.下面简单介绍下Java中几种基本数据类型,以加深记忆. 在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型.(一个字节等于8个bit) 1.整型 类型              存储需求     bit数    取值范围      备注 int                 4字节           4*8 s

Java字符串中常用字符占用字节数

java中一个char型的数据(也就是一个字符)占两个字节.而Java中常用的字符包括数字.英文字母.英文符号.中文汉字.中文符号等,若在字符串中包含里面的多种字符,它们是否都占两个字符呢?答案是否定的. public class CharBytes { public static void main(String[] args) { String s1 = "1234567";// 7个数字字符 byte[] b1 = s1.getBytes(); System.out.printl

64位操作系统下,关于int和long占用字节数同为4问题

一.c语言数据占用字节 32位:char 1    short  2   int 4  long 4  long long 8 64位:char 1   short 2    int 4 long 8 long long 8 二.可能原因  编译器的数据模型 Datetype  LP64   ILP64   LLP64   ILP32    LP32 char           8          8         8            8          8 short