执行Hive的`SHOW CREATE TABLE`语句,结果有中文乱码


这个问题已经困扰了我很多天了,一直在网上找不到答案。具体问题是这样的:

我希望得到hive中表的建表语句,所以在hive cli里面执行 show create table 语句,但是发现得到的结果中,中文是乱码,而英文不是乱码。类似这样:


 hive> show create table table_test;
OK
CREATE  TABLE `table_test`(
  `fid` bigint COMMENT '��(q(UID)', 
  `fname` string COMMENT '
�', 
  `fcompanyid` bigint COMMENT 'l�
  `fsn` string COMMENT '�K�:SN/IMEI', 

(...etc.)

Time taken: 0.321 seconds, Fetched: 45 row(s)

后面我查了一些资料,发现与hive的metastore的MySQL编码有关,所以我将MySQL中的相关编码从latin1更改为UTF-8。这下,在Hive中执行 DESC table 的语句是 可以正确 的显示中文的,但是 SHOW CREATE TABLE 语句仍然还是这样的乱码。

我尝试在Java中取得这些结果并用如下的语句转码,但是转完的文字更不对了……


 String decodedStr = new String(rawStr.getBytes("ISO-8859-1"), "UTF-8");

大数据 mysql 字符编码 hive

南風谷晚稻 10 years, 2 months ago

如果你确定mysql服务器 端utf8没问题了, 那你可能需要设一下 服务器 和 客户端之间使用的 字符集.
执行:


 set names 'utf-8'

http://dev.mysql.com/doc/refman/5.6/en/charset-connection.html

SET NAMES indicates what character set the client will use to send SQL
statements to the server. Thus, SET NAMES 'cp1251' tells the server,
“future incoming messages from this client are in character set
cp1251.” It also specifies the character set that the server should
use for sending results back to the client.

舔胸就是好 answered 10 years, 2 months ago

Your Answer