Hive中文乱码问题:

Hive中文乱码问题:

在做实战时发现存在中文乱码问题:

为什么会乱码:
普通情况下咱们的mysql默认编码是latin1,但是我们在日常开发中大多数情况下需要用到utf-8编码,如果是默认latin1的话,咱们的中文存储进去容易乱码,所以说大家在遇到一些数据乱码的情况话,最好把mysql的编码改成utf-8.

注意一点::hive的元数据metastore在mysql的数据库,不管是数据库本身,还是里面的表编码都必须是latin1(CHARACTER SET latin1 COLLATE latin1_bin)!!!

验证方式:

mysql> show create database hive_cz3q;
在这里插入图片描述

在创建表的时候
create external table cars(
province string comment ‘省’,
month int comment ‘月’,
city string comment ‘市’,
district string comment ‘区县’
)
row format delimited fields terminated by ‘\t’;

在创建表的时候,字段可以有 comment,但是 comment 建议不要用中文说明,因为我们说过,hive 的 metastore 支持的字符集是 latin1,所以中文写入的时候会有编码问题

1)离线安装mysql的修改方式:
①修改编码,设置为utf8

拷贝 mysql 的配置文件/usr/share/mysql/my-small.cnf 到/etc/my.cnf

在mysql 配置文件/etc/my.cnf 中增加以下内容

[client]下面增加
default-character-set=utf8
在[mysqld]下面增加
default-character-set=utf8
init_connect=‘SET NAMES utf8’
②重启mysql 服务(这样确保缺省编码是utf8)

service mysqld restart
③验证编码是否改成了utf8:

输入命令 "\s"查看是否变了

在这里插入图片描述
输入命令:show variables like ‘char%’
在这里插入图片描述

输入命令:show variables like “colla%”;
在这里插入图片描述
这样在启动hive,向hive中插入的表中comment等有汉字的情况,就可以正常的显示

在线安装mysql的修改方式
①修改编码,设置为utf-8

在 mysql 配置文件/etc/my.cnf(不需要拷贝)中[mysqld]的下面增加以下内容

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

启mysqld服务

 service mysqld restart

和离线方式一样验证编码是否确实修改;

show variables like 'char%';

进入数据库 MySQL中执行以下 5 条 SQL 语句

修改表字段注解和表注解:
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;
修改分区字段注解
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;
修改索引注解
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

修改MySQL的连接 URL:

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://IP:3306/db_name?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</value>
    <description>JDBC connect string for a JDBC metastore</description>
</property>

验证:

改好后,用一个表和数据导入后面查看一下,select*from 表名 查看一些是否还是乱码

或者 desc 表名,查看一些表的结构,看看有没有改成utf-8格式

以上我的表的,大家如果要改的话,要改成自己的表字段和分区字段的,还有数据库的名字和端口号的

以上我的表的,大家如果要改的话,要改成自己的表字段和分区字段的,还有数据库的名字和端口号的

最后一种情况是:

你传入的表是csv,但是他和格式和txt不一样,你可以把.csv的文件后缀名改成.txt
在这里插入图片描述

也可以在notepad或者其他笔记软件改一下文件编码格式就行,不要去改数据库也可以读取,不会出现乱码
在这里插入图片描述
一般先试试这个,这个不行就改数据库文件的编码格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deng872347348

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值