Hive string、varchar、char3种字符串类型比较

hive官网是这样介绍的:
在这里插入图片描述
翻译:

String

String字面量可以用单引号(')或双引号(")来表示。Hive在字符串内部使用类似C语言的转义规则。

varchar

Varchar类型在创建时会带有一个长度说明符(介于1-65535之间),该说明符定义了字符字符串中允许的最大字符数量。如果试图转换或分配给varchar值的字符串长度超过了长度说明符,字符串将会被静默截断。字符长度由字符字符串所包含的代码点数确定。
和String一样,varchar尾部的空格也会作为字符串的一部分,影响字符串的比较。

varchar限制

非泛型的UDF(用户自定义函数)不能直接使用varchar类型作为输入参数或返回值。可以创建字符串(String)类型的UDF来替代,并且varchar值会被转换为字符串后传递给UDF。若要直接使用varchar类型的参数或返回varchar值,应创建GenericUDF(泛型UDF)。
存在其他可能不支持varchar类型的情况,特别是那些依赖反射方法来获取类型信息的场景,这包括某些SerDe(序列化与反序列化)实现。

char

Char类型与Varchar相似,但它们是固定长度的,意味着比指定长度短的值会被空格填充,但在比较时char字符串尾部的空格不会作为字符串的一部分去比较。char最大长度为255个字符。

总结:

长度方面:string 没有限制,varchar65535字节,char255字符(其中varchar655535个字节中有几个字节用来存储长度[mysql是1-2个,长度超过255时用2个字节])
存储字符串尾部的空格方面:string和varchar尾部空格会作为字符串的一部分来影响字符串的比较’abc '!=‘abc’,char不会
string与varchar之间,string支持的场景更多:UDF不支持varchar类型作为出参和入参,一些序列化与反序列化场景也可能不支持【hive2.1.1的版本中对varchar进行一些处理的时候可能会显示乱码,详情见:

https://www.jianshu.com/p/7bf3ee605e9e

截图来自hive官网:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-VarcharvarcharVarchar

同时感谢jokertiger对本博客的帮助
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值