`
骑自行车去旅行
  • 浏览: 11761 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle数据库中varchar2详细说明

阅读更多
oracle数据库相信大家都比较熟悉,数据库中有一种非常常用的数据类型:字符串型。

         对应该类型,在oracle中有三种比较常用的类型:varchar2(byte)、varchar2(char)、nvarchar2()。

         那么这三种类型到底有什么区别呢?

         首先,我们要时刻记清:无论是varchar2还是nvarchar2,最大字节数都是4000。

         varchar2(byte):就是默认的表示方式,比如我们写成:varchar2(100),就相当于varchar2(100 byte),表示最大字节数是100,该字段最多能容纳100个字节,强调空间大小。由于我们描述的是字节,因此,保存汉字等字符时,就要小心了。如果你的数据库用的是GBK编码,那么一个汉字将占用2个字节,最多能存50个汉字,如果你的数据库用的是UTF8编码,那么一个汉字将占用3个字节,最多能存33个汉字。

         varchar2(char):表示最大字符数是100,该字段最多能容纳100个字符,强调个数。假设我们写成varchar2(100 char),那么无论是数字、字母、汉字,都看成一个字符,最多写100个,当然,汉字越多,占用的空间越大,同样遵循上边的数据库编码原则。例如:存入一个汉字,底层占2或3个字节,存入一个字母,占1个字节,绝对不是某些文章所说1个字母或数字也占2或3个字节!

         nvarchar2():没有byte、char之分,类似于varchar2(char),只不过nvarchar2()屏蔽了数据库编码,无论是何种编码,nvarchar2()中一个汉字都占两个字节。

         一般的教程,也就到这了,可是如果再多一步思考,会发现一个致命问题。

         实际应用中,很可能会出现这种写法:varchar2(1400 char),我们主观的认为,这个字段最长不能超过1400个字符,这意味着我们可能会存入1399个字符,貌似很正确的样子。

         但是,如果这1399个字符都是汉字,字符长度并没有超过1400,看起来一切正常,但实际上我们损失了一部分数据,为什么?

         因为1399个汉字,按UTF8编码来说(99%的项目都是UTF8编码吧。。),需要占用1399*3=4197个字节,而文章开篇就说,无论是什么char,最大长度就是4000字节,一个也不能多,因此多出来的197个字节,都会抹去,而整个过程中,无任何错误提示,你的数据就这样蒸发了!

         所以,对于GBK编码的数据库而言,安全的写法为:varchar2(2000 char)、nvarchar2(2000),对于UTF8编码的数据库而言,安全的写法为:varchar2(1333 char)、nvarchar2(2000)。
分享到:
评论

相关推荐

    oracle中varchar2(byte)和varchar2(char).doc

    在Oracle数据库中,`VARCHAR2`是最常用的字符数据类型之一,用于存储变长的字符串。然而,在定义`VARCHAR2`类型时,可以选择指定长度为`BYTE`或`CHAR`。这两种方式看似细微的差别,实际上却对数据存储、性能优化以及...

    查看登录oracle数据库用户记录.docx

    username VARCHAR2(50) ); ``` 建立数据库表触发器 接下来,需要建立一个数据库表触发器来记录用户的登录行为。可以使用以下 SQL 语句来建立触发器: ```sql CREATE OR REPLACE TRIGGER LOG_LOGON AFTER LOGON ...

    varchar 和varchar2之间的联系和区别

    总的来说,虽然`VARCHAR`和`VARCHAR2`在名称上有一定的相似性,但在实际应用中,`VARCHAR2`因其更长的最大长度、更好的空格处理机制以及更高的兼容性,在Oracle数据库中得到了更广泛的应用。理解这些细微的区别,...

    labview 调用oracle数据库

    本篇将详细讲解如何利用LabVIEW调用Oracle数据库,包括ODBC连接、创建表、写入数据以及查询与更新操作。 首先,要实现LabVIEW与Oracle数据库的连接,我们需要借助ODBC(Open Database Connectivity)驱动程序。ODBC...

    oracle数据库从入门到精通.pdf

    文档《oracle数据库从入门到精通.pdf》详细地介绍了Oracle数据库的基础知识和高级操作,使得学习者能够从基础的表空间创建到存储过程的编写,以及游标的应用等高级特性有深入理解和掌握。 首先,文档指出了创建表...

    oracle数据库 详细课件

    本详细课件将引导你逐步了解Oracle数据库的基础知识,为你的入门之旅提供全面指导。 1. **Oracle数据库概述** Oracle数据库系统是一种支持分布式处理、高度可扩展、安全可靠的数据库解决方案。它采用SQL(结构化...

    oracle数据库中的对表中字段的增删改查

    在Oracle数据库中,对表中字段的增删改查是数据库管理的基础操作,涉及到数据库设计、数据完整性以及日常的数据维护工作。以下将详细介绍这四个基本操作,并结合标签“源码”和“工具”来探讨如何在实践中高效地完成...

    oracle char,varchar,varchar2的区别和使用方法

    - Oracle 推荐使用 `VARCHAR2` 类型,特别是在较新版本中,`VARCHAR` 已经与 `VARCHAR2` 一致。 #### 特殊类型:NCHAR 和 NVARCHAR2 除了上述三种基本的字符类型之外,Oracle 还提供了两种 Unicode 字符类型:`...

    Oracle 数据库多语言入库问题的解决方案

    Oracle 数据库多语言入库问题的解决方案是针对企业在国际化进程中遇到的多国语言信息存储难题,尤其是在使用Oracle数据库时,由于字符集的不兼容性导致非中文语言数据入库时出现乱码。Oracle数据库作为全球广泛使用...

    GP数据库表结构转mysql库、oracle库 varchar类型字段长度批量处理excel_MYSQL_oracle_数据库

    在Oracle数据库中,varchar2类型的字段长度可高达4,000个字符,但在特定情况下,如使用BLOB存储,可以扩展到更大的值。当从Oracle迁移到MySQL或GP时,可能需要调整字段长度以适应目标数据库的限制。例如,如果源...

    从oracle数据库中存取图片

    本篇文章将基于提供的代码片段来详细解析如何使用Java语言实现从Oracle数据库中存储与读取图片的功能。 #### 一、创建存储图片的表 在开始之前,我们需要在Oracle数据库中创建一个可以存储图片数据的表。根据描述...

    c#登陆界面与Oracle数据库连接并增删改查

    v_Password varchar2, b_Passed out char ) as n_Count number; begin select count(*) into n_Count from admin where name=v_Name and password=v_Password; if n_Count > 0 then b_Passed := '1'; else b...

    oracle数据库教学ppt

    在Oracle数据库教学中,了解和掌握SQL语言是至关重要的。SQL,全称为Structured Query Language,即结构化查询语言,它是用于管理和处理关系数据库的标准语言,集数据定义、数据查询、数据更新和数据控制四大功能于...

    c# 连接oracle数据库和对数据库的基本操作

    在C#中与Oracle数据库进行交互是常见的任务,尤其对于初学者来说,了解这个过程是必要的。本篇文章将深入探讨如何使用C#连接Oracle数据库以及执行基本的数据操作。由于描述中提到这适用于初学者,我们将从基础知识...

    C#对Oracle数据库的增加,删除,修改,基本语句

    本文将详细介绍如何使用C#进行Oracle数据库的增、删、改操作,并涉及数据绑定和实时查询的实现。 首先,我们需要引入Oracle的客户端库,如Oracle.DataAccess.Client,这通常通过NuGet包管理器添加到项目中。在C#...

    Oracle数据库语句大全.doc

    * VARCHAR2:1-4000 字节的变长字符 * LONG:2GB 的变长字符 数值型包括: * NUMBER:最高精度 38 位 日期型包括: * DATE:精确到秒 * TIMESTAMP:秒值精确到小数点后 6 位 Oracle 数据库语句大全还包括各种 ...

    Oracle数据库经典教程

    以下是对"Oracle数据库经典教程"的部分内容的详细说明: **走进Oracle** Oracle数据库系统由Oracle公司开发,提供了数据存储、管理、备份和恢复等一系列功能。它的强大性能、高度可扩展性和安全性使得它成为许多...

    ORACLE 数据库入门教程

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,尤其在企业级应用中占据重要地位。本教程旨在为初学者提供一个全面的Oracle数据库入门指南,帮助你快速掌握Oracle的基础知识和操作技能。 一、Oracle...

Global site tag (gtag.js) - Google Analytics