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_V2 和 TABLE_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;