中文字符的存储
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
字符与字节的说明
以上是关于中文字符的存储的主要内容,如果未能解决你的问题,请参考以下文章