zoukankan      html  css  js  c++  java
  • varchar数据类型详解与比较

    Oraclevarchar2字段最长设置4000,数据库设计如果有字段较多的则设置4000

    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个,当然,汉字越多,占用的空间越大,同样遵循上边的数据库编码原则。例如:存入一个汉字,底层占23个字节,存入一个字母,占1个字节,绝对不是某些文章所说1个字母或数字也占23个字节!

    nvarchar2():没有bytechar之分,类似于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)

  • 相关阅读:
    python模块学习第 0000 题
    报错The VMware Authorization Service is not running
    图像指纹的重复识别
    CSS预编译器配置-------LESS Sass Stylus webstorm
    CSS布局中的水平垂直居中
    进度与日程
    HTML5 application cache
    进度
    CC2530芯片介绍
    Linux命令工具 top详解
  • 原文地址:https://www.cnblogs.com/wanlige/p/12425282.html
Copyright © 2011-2022 走看看