hive metastore为MySQL时的中文乱码问题

问题一

  • 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为MySQL时的中文乱码问题

问题二

  • hivemetastore虽然转为了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时的中文乱码问题
0 0 投票数
文章评分

本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://lrting.top/backend/10660/

(0)
上一篇 2022-10-27 21:44
下一篇 2022-11-03 00:20

相关推荐

订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x