记录一次解决中文乱码问题,但严格来说不是我独立解决的,但anyway,解决方式值得被记录。
当时虚拟机里面的数据库是mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
最开始搜索网上资料,按照比较普遍的改法,以前也亲测过,曾经是成功过的,
1. 进入数据库metastore执行以下SQL语句
use hive3; -- 修改表字段注解和表注解 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;
2.修改metastore 的链接url (hive-site.xml)
javax.jdo.option.ConnectionURL jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
3.重启客户端
但这次试了一下没有成功。
=======================================================================
然后通过show variables like 'character%'; 发现mysql库里面的编码没有改
最开始通过会话级别修改mysql编码, 在mysql中执行
set character_set_database=utf8; set character_set_server=utf8; set character_set_client=utf8; set character_set_connection =utf8; set character_set_results =utf8;
发现没有还是不管用,
=======================================================================
然后去修改/etc/my.cnf文件,最开始用utf8,但是重启mysql失败,
查了博文发现,
“在 mysqld 中使用 default-character-set 设置, mysql 启动会报错而无法启动。
说明
关于utf8字符集,我们国内默认选择:utf8_general_ci而不是utf8_unicode_ci ”
最终,改成这样:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[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
————————————————
原文链接:https://blog.csdn.net/weixin_31328561/article/details/113555423
然后
1)service mysql restart 重启数据库服务
2)重新进入数据库客户端
3)删掉原来的库和表
4)执行前面 【进入数据库metastore执行的6条SQL语句】
5)重新 建库建表
发现, desc formatted 表名 可以看到字段的中文注释了
但是,表注释看不到!!!
=======================================================================
然后继续研究,发现
这个hive数据库的元数据信息没有改,
最后,前面6条sql语句后面加上,
alter table DBS modify column `DESC` varchar(4000) character set utf8;
最终解决问题!