暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于Oracle和Tbase中的varchar2和varchar的探讨

原创 范达宏 2024-10-28
299

 小问题也有大学问,如有讹误,请广大网友指正

1.Oracle环境下varchar2和varchar有区别吗?

网上很多资料说Oracle环境下varchar2和varchar有很多区别,什么对null的处理啥的等等,其实他俩貌似真没区别啊,看以下例子。用varchar创建的c1字段在实际创建时仍是使用varchar2类型【为什么有这2个,是因为历史原因】。


2.Oracle环境下varchar2(n),这个n指的是字节数还是字符数?

在Oracle环境中,这个n既可能是字符数,也可能是字节数。主要取决于参数nls_length_semantics

当参数是BYTE时,指的是字节数,当参数是char时,指的是字符数【当然如果纯粹存放英文字母,这两者并无差异】,注意当参数是char时,你插入了多字节存储的字符(比如汉字),使用length函数查到的是字符的数量,而如果想查询字节数量,可使用lengthb函数。


3.Oracle究竟使用2个字节还是3个字节存放汉字?

Oracle中使用多少个字节存放汉字主要还是看使用了什么字符集,比如说我们常见的GBK字符集则通常使用2个字节来存放汉字,UTF8字符集则采用3个字节存放汉字,因此若无特殊的汉字字符的话,建议使用GBK字符集减少存储,提高性能。


4.Tbase的varchar和varchar2有什么区别?

首先,Tbase的常规模式为pg模式,根本就没有varchar2这个字符类型。

其次Tbase的Oracle模式下(创建数据库时指定sql mode = oracle)下,提供了varchar2这个数据类型,但varchar与varchar2有着明显的区别【这点和Oracle不一样】,Tbase中的varchar指的是字符的数量,varchar2指的是字节的数。

通过实际查询可以看到col1是varchar(5),实际存放了5个汉字字符,实际15个字节。

而varchar2(5)则只能存放1个汉字字符,3个字节。


5.Oracle数据库迁移到Tbase中,Tbase使用什么类型来对应Oracle数据库中varchar2类型?

oracle中采用的是字节数的话【nls_length_semantics=byte】,建议对应的tbase可以选择varchar2。

oracle中采用的是字符数的话【nls_length_semantics=char】,建议对应的tbase可以选择varchar,此时如果还选择varchr2的话,可能需要适当增加n的倍数。

最后修改时间:2024-10-28 22:15:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论