在Hive客户端中创建的表包含中文注释乱码解决方案
一、因为Hive元数据存储在Mysql数据库中,MySQL库执行以下SQL:
(desc表名可看见不能正常显示中文,所以需要执行一次下列语句后再创建各张表)
#修改字段注释字符集
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
#修改表注释字符集
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8;
#修改分区参数,支持分区建用中文表示
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(20000) character set utf8;
#修改索引名注释,支持中文表示
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
#修改视图,支持视图中文
ALTER TABLE TBLS modify COLUMN VIEW_EXPANDED_TEXT mediumtext CHARACTER SET utf8;
ALTER TABLE TBLS modify COLUMN VIEW_ORIGINAL_TEXT mediumtext CHARACTER SET utf8;
二、修改hive-site.xml中Hive读取元数据的编码
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop103:3306/metastore?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value>
</property>
三、JDBC设置链接URL的问题
dbc:mysql://hadoop102:3306/gmall?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
- gmall是连接的数据库名称,如果连接元数据库,则应为metastore
- 对高版本MySQL需要显示地指明是否使用SSL连接,不设置就会报错,所以需要加上useSSL参数,可设为true或者false,在这里设置false
- 在.xml配置文件中配置数据库URL时,要使用&的转义字符也就是 & amp;,即得把&改成 & amp;,如下
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop103:3306/metastore?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8</value>
</property>
- GMT%2B8为GMT+8,因为默认时区是全球统一时间 (UTC),北京时间是 UTC+8,即要快上个8小时,基于GMT = UTC+0,GMT%2B8就表示北京时间东八区,+加号在url链接中必须被编码,所以就成了%2B,或者是直接设serverTimezone=Asia/Shanghai