首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WE8MSWIN1252字符集的哪个NLS_LENGTH_SEMANTICS

WE8MSWIN1252字符集的哪个NLS_LENGTH_SEMANTICS
EN

Stack Overflow用户
提问于 2012-06-15 11:01:01
回答 2查看 4.6K关注 0票数 1

我们有一个数据库,其中的字符集设置为WE8MSWIN1252,据我所知,这是一个单字节字符集。

我们通过运行包含以下内容的脚本创建了一个架构及其表:

更改SYSTEM SET NLS_LENGTH_SEMANTICS=CHAR

我们可能会丢失数据吗,因为我们使用的是带有字符语义的VARCHAR2列,而底层字符集是单字节的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-15 11:11:12

如果您使用的是像Windows-1252这样的单字节字符集,那么您使用的是字符语义还是字节语义都无关紧要。每个字符只占用一个字节,因此列是声明为VARCHAR2(10 CHAR)还是VARCHAR2(10 BYTE)并不重要。在任何一种情况下,都将分配最多10个字节的存储空间,最多可存储10个字符。

由于更改NLS_LENGTH_SEMANTICS设置没有任何好处,因此应该将该设置保留为缺省值(BYTE),因为这不太可能导致您可能需要运行的其他脚本(例如来自Oracle的脚本)出现问题。

票数 2
EN

Stack Overflow用户

发布于 2013-03-29 02:15:35

问得好。多字节字符将占用所需的字节数,这可能会占用比预期更多的存储空间。如果在varchar2(4)列中存储一个4字节的字符,则已使用了全部4个字节。如果在varchar2(4个字符)列中存储4字节字符,则仅使用了1个字符。许多外语和特殊字符使用2字节字符集,因此最好“了解您的数据”,并相应地定义数据库列。Oracle不建议将NLS_LENGTH_SEMANTICS更改为CHAR,因为这将影响定义为CHAR或VARCHAR2的每个新列,在执行就地升级时可能包括目录表。您可以明白为什么这可能不是一个好主意。其他Oracle工具集和界面也可能会出现问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11044086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档