zoukankan      html  css  js  c++  java
  • 中文字符的存储

    主要分析下面内容

    在数据库:oracle,mysql下,对字符集:gbk,utf-8的处理

    Oracle

    如果字符集为gbk,gb2312,Varchar类型的数据库字段长度/2为存储中文字符长度

    GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。
    GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。

    UTF-8 Unicode Transformation Format-8bit。是用以解决国际上字符的一种多字节编码。

    它对英文使用8位(即一个字节) ,平均中文使用24位(三个字节)来编码。

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

    varchar2(byte):就是默认的表示方式,比如我们写成:varchar2(100),就相当于varchar2(100 byte),表示最大字节数是100,该字段最多能容纳100个字节,强调空间大小

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

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

    无论是varchar2还是nvarchar2,最大字节数都是4000。

    所以,对于GBK编码的数据库而言,安全的写法为:varchar2(2000 char)、nvarchar2(2000)

    对于UTF8编码的数据库而言,安全的写法为:varchar2(1333 char)、nvarchar2(2000)。

    varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;

    varchar -- 存放定長的字符數據,最長2000個字符;
    varchar2 -- 存放可變長字符數據,最大長度為4000字符。

    --nvarchar,nvarchar2  联系: 1.nvarchar/nvarchar2用于存储可变长度的字符串 2.size 的最大值是 4000,而最小值是 1,其值表示字符的个数,而不是字节数 3.这两种类型更适合存储中文

    区别:

    1.nvarchar中字符为中文则一般按2个字节计算,英文数字等按照一个计算

    2.nvarchar2中所有字符均按照2个字节计算;

    3.nvarchar2虽然更占空间,但是它有更好的兼容性,所有推荐使用;

    Mysql

    Gbk与utf-8下,字符集Varchar,char是不区分中英文字符

    小知识

    Oracle 查看字符存储类型

    select userenv('language') from dual;

    AMERICAN_AMERICA.ZHS16GBK

    字符与字节的说明

     

  • 相关阅读:
    【计算机组成原理】00-开篇词
    【设计模式】05-面向对象四大特性能解决什么问题
    【设计模式】04-面向对象谈了啥
    【设计模式】03-面向对象、设计原则、设计模式、编程规范、重构的关系
    模拟银行业务调度系统逻辑
    模拟交通灯管理系统逻辑设计
    JDK1.5新特性(七)……Annotations
    代理与动态代理
    类加载器
    JDK1.5新特性(六)……Generics
  • 原文地址:https://www.cnblogs.com/interfaceone/p/9759972.html
Copyright © 2011-2022 走看看