中文字符的存储

Posted interfaceone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中文字符的存储相关的知识,希望对你有一定的参考价值。

主要分析下面内容

在数据库: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

字符与字节的说明

 技术分享图片

 



以上是关于中文字符的存储的主要内容,如果未能解决你的问题,请参考以下文章

Java语言中的字符char可以存储一个中文汉字吗为什么呢

怎么用cout输出string的中文字符

JAVA字符型类型_转义字符

redis 存储中文,是怎么编码

转 ORACLE数据库它可以存储 中文 字节或字符

使用UTF8字符集存储中文生僻字