问题一
-
当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 表名>;
- 修改数据库的编码格式为
utf8
alter database 数据库名> character set utf8;
- 修改表编码格式为
utf8
alter table 表名> character set utf8;
- 查看表
TBLS
的编码use metastore; show create table TBLS;
- 修改表
TBLS
的指定列编码为utf8
ALTER 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/