问题一
-
当hive的metastore为MySQL时,数据库及表编码都必须是
latin1(CHARACTER SET latin1 COLLATE latin1_bin),否则会有出现报错-
Latin1的好处:Latin1编码范围使用了单字节内的所有空间,在支持Latin1编码的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作Latin1编码看待都没有问题
-
-
中文在
Latin1下乱码,表现为?
解决方法
-
修改
/etc/my.cnf,文件中增加如下内容[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = 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 # 修改分区字段注解 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; -
service mysqld restart -
check

问题二
-
hive的metastore虽然转为了utf8,但在create view时中文依然乱码,表现为?
解决方法
- 查看数据库编码格式
show variables like 'character_set_database'; - 查看表的编码格式
show create table 表名>; - 修改数据库的编码格式为
utf8alter database 数据库名> character set utf8; - 修改表编码格式为
utf8alter table 表名> character set utf8; - 查看表
TBLS的编码use metastore; show create table TBLS; - 修改表
TBLS的指定列编码为utf8ALTER TABLE</span>TBLS<span class="token punctuation">MODIFY COLUMN VIEW_EXPANDED_TEXT mediumtext CHARACTER SET utf8; ALTER TABLE</span>TBLS<span class="token punctuation">MODIFY COLUMN VIEW_ORIGINAL_TEXT mediumtext CHARACTER SET utf8;
原文链接:hive metastore为MySQL时的中文乱码问题
本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://lrting.top/backend/10660/