Hive建表表注释乱码

问题描述:

在使用数据中台进行数据开发的时候实际遇到的问题:hive建表表注释出现中文乱码,使用show create table table_name;查看对应数据库的详细细信息出现注释乱码在这里插入图片描述


原因分析:

提示:中文乱码的原因,编码问题

首先启动hive服务的时候会有hivemetastore和hiveserver2俩个进程,分别对应的表的元数据信息的存储和hivesql的解析,元数据一般存在第三方数据库mysql中,中文乱码可能出现的原因有,元数据库mysql编码格式不对,解析不了中文字符第二种可能就是在进行hive解析通过hivemetastore服务写入到元数据库里的时候出现乱码


解决方案:

提示:解决办法一般从元数据库编码格式和hive建表的时候存数据到元数据库的过程入手

顺着可能出现乱码的原因第一步排查的就为我们mysql的编码,一般hive使用的元数据库库名默认为hive,这里我们对全库进行查看编码,这里查到的编码格式为latin1格式,latin1格式对中文的支持不是很友好
在这里插入图片描述

UTF8和Latin1是两种字符编码标准。UTF-8是一种可变长度的字符编码标准,它可以用来表示世界上几乎所有的字符,包括中文、日文、韩文等等。UTF-8使用1到4个字节表示一个字符,英文字母和数字使用1个字节,汉字使用3个字节。Latin1(也称为ISO 8859-1)是一种固定长度的字符编码标准,它可以表示西欧语言中的字符,包括英文字母、数字以及一些重音符号、标点符号等。Latin1使用1个字节表示一个字符,因此它最多可以表示256个字符,对中文不是很友好。

-- 执行如下的代码
use hive;
show variables like 'character_set_database';
-- 修改数据库编码格式为UTF8
alter database hive character set utf8;
-- 修改数据库格式
alter table customer CONVERT to character set utf8;
-- 修改表字段字符集/表注释字符集
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;

设置完成后去beeline客户端连接hive执行建表语句发现仍然是中文乱码,那么顺着第二条思路,hive在写入元数据的时候出现中文乱码,hive默认的编码格式为latin1,这边需要更改hive-site.xml文件的jdbc配置,如果未指定编码格式就默认latin1,这样就会造成编码格式与元数据的编码格式不统一,写入元数据的格式和元数据库的格式不统一也会出现中文乱码,jdbc配置如下

jdbc:mysql://localhost:3306/hive?useUnicode=true&characterEncoding=UTF-8

调整后查看表注释,显示正常
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值