当前位置: > > > Hive - 解决建表语句中文注释乱码问题(comment乱码)

Hive - 解决建表语句中文注释乱码问题(comment乱码)

1,问题描述

(1)我们知道在建表时使用用 comment 关键字可以给字段,以及表本身增加注释:
create table t5(
  age int comment '年龄'
) comment '测试';

(2)但创建后查看这个表的信息,可能会发现我们添加的中文注释都是乱码:

2,问题原因

(1)中文乱码的原因是因为 hive 数据库里面的表都是 latin1 编码的,中文本来就会显示乱码。
(2)但是我们不能修改整个数据库里面所有表的编码,否则在使用 hive 的时候会出问题,那么只有考虑把存储字段注释和表注释相关的表的编码改为 utf8

3,解决办法

(1)登陆 Mysql 数据库切换到 Hive 库:
use hive;

(2)确认一下现在表 COLUMNS_V2TABLE_PARAMS 的编码,都是 latin1
show create table COLUMNS_V2;
show create table TABLE_PARAMS;

(3)修改这两张表的编码即可:
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

(4)如果我们的表创建了分区的话就要再执行两条命令:
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;

(5)修改之后,后续新创建的表就可以看到中文注释了。
注意:之前创建的表如果想要显示中文注释,需要将其删除掉,因为之前存储的中文已经是乱码了,无法恢复,删除之后重新创建就可以了。
drop table t5;

create table t5(
  age int comment '年龄'
) comment '测试';

desc t5;

show create table t5;
评论0