在服务上打开Hive Shell客户端,经常需要输入中文条件,但是每次都遇上输入中文乱码的问题。这个时候我想到了一个办法,那就是将中文URL编码,然后再解码作为查询条件的值。
例如:我需要查询公司名称为“饭店”的记录
原本查询SQL应该如下:
select * from company where company_name like '%饭店%';
但是在shell上可能会乱码,会让你输入不成功。
解决办法:
将“饭店”URL编码为“%E9%A5%AD%E5%BA%97”,然后再用Hive的反射函数解码:
reflect('java.net.URLDecoder', 'decode','%E9%A5%AD%E5%BA%97' , "UTF-8")
于是查询条件变为:
select * from company where company_name like concat('%',reflect('java.net.URLDecoder', 'decode','%E9%A5%AD%E5%BA%97', "UTF-8"),'%');
到此问题很清晰就解决了。
网上还有一种办法:
设置 /home/用户/.profile 文件中LANG=en_US.UTF-8即可
这种办法没尝试过,但本文的方法能解决所有情况下的乱码问题。