在插入数据后,发现hive乱码
原因:Hive默认将存储表结构的元数据列编码设置为latin1,不支持中文
解决方法:在MySQL中修改对应Hive元数据列的编码
先查看mysql的所有字符集编码
1、先修改my.cnf
代码如下:
java
vim /etc/my.cnf
# 在尾部加入以下内容
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
2、重启mysqld
bash
systemctl restart mysqld
3、修改字段注释字符集
sql
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
4、修改表注释字符集
sql
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
5、修改分区表参数,以支持分区键以及值能够用中文表示(可选)
sql
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 PARTITIONS modify column PART_NAME varchar(767) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL;
alter table PARTITION_KEY_VALS modify column PART_KEY_VAL varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL;
6、修改索引注解(可选)
sql
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
7、查看mysql编码
8、进入hive,查看字符集
9、乱码解决
注意:每次修改字符集后,需要重新插入数据,从而实现修改同步,这里就能正常显示中文了
总结:三端同步
最终是实现三端同步{客户端(cli命令行),服务端(就是存在的库和表),数据(插入数据的编码)},只要这三端都是utf8,则数据一定能显示utf8格式, 一般情况完成前4步就能解决乱码问题