当前位置:  开发笔记 > 前端 > 正文

列数据类型中BYTE和CHAR之间的差异

如何解决《列数据类型中BYTE和CHAR之间的差异》经验,为你挑选了3个好方法。

在Oracle中,有什么区别:

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)

David Sykes.. 257

我们假设数据库字符集是UTF-8,这是Oracle最新版本中的推荐设置.在这种情况下,某些字符需要超过1个字节才能存储在数据库中.

如果将字段定义为VARCHAR2(11 BYTE),则Oracle最多可以使用11个字节进行存储,但实际上您可能无法在字段中存储11个字符,因为其中一些字符需要存储多个字节,例如非英语字符.

通过在VARCHAR2(11 CHAR)告诉Oracle时定义字段,它可以使用足够的空间来存储11个字符,无论存储每个字符需要多少字节.单个字符最多可能需要4个字节.



1> David Sykes..:

我们假设数据库字符集是UTF-8,这是Oracle最新版本中的推荐设置.在这种情况下,某些字符需要超过1个字节才能存储在数据库中.

如果将字段定义为VARCHAR2(11 BYTE),则Oracle最多可以使用11个字节进行存储,但实际上您可能无法在字段中存储11个字符,因为其中一些字符需要存储多个字节,例如非英语字符.

通过在VARCHAR2(11 CHAR)告诉Oracle时定义字段,它可以使用足够的空间来存储11个字符,无论存储每个字符需要多少字节.单个字符最多可能需要4个字节.


请注意,字符长度语义不会影响`VARCHAR2`的4000字节最大长度.如果某些字符需要多个字节的存储空间,则声明`VARCHAR2(4000 CHAR)`将允许少于4000个字符.

2> Matthias Kes..:

一个具有11个字节的空间,另一个具有11个字符.诸如Unicode变体之类的一些字符集可能每个字符使用多个字节,因此11字节字段可能具有少于11个字符的空间,具体取决于编码.

另请参见http://www.joelonsoftware.com/articles/Unicode.html



3> user15453..:

根据系统配置,BYTES中的CHAR大小可能会有所不同.在你的例子中:

    将字段限制为11 BYTE

    将字段限制为11个CHAR字符


结论:1 CHAR不等于1 BYTE.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有