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对本博客的帮助