出现了这个问题,困扰了好半天,终于明白问题不在我这里。为了以后不再踩坑,决定记录一下。
1.查看很多博主基本上是这些步骤1》查看mysql编码格式 2》查看hive元数据库编码格式3》修改终端的编码格式。根据这些个步骤走了一编,结果还是乱码。
1》查看mysql编码格式
show variables like 'char%';
2》查看hive库编码格式及修改
show create database hive;
mysql > use hive;
# 然后修改部分配置
mysql > alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
Query OK, 91 rows affected (0.05 sec)
Records: 91 Duplicates: 0 Warnings: 0
mysql> alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
Query OK, 35 rows affected (0.05 sec)
Records: 35 Duplicates: 0 Warnings: 0
mysql> alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql > commit;
然而没有什么用
3》查看终端编码格式,不是UTF-8,修改成UTF-8
如要修改编码格式:
export LANG=en_US.UTF-8
2.最终想了一下,如果数据源头与终端的编码格式一致,是不可能的出现乱码的。上面的操作起码知道了,环境的编码格式是UTF-8。
那么,只要csv文件也是这个编码格式,还出现这个问题,那就有鬼了。于是乎:
file sourcedata.csv
看到了吗,编码格式为ISO-8859-1,问题就出现在这里
修改编码格式:
>> :setlocal buftype=
>> :set fileencoding=utf-8
>> :wq!
然后再查看编码格式:
但首先得保证,设置编码格式后数据不乱码,如果乱码了,那就直接导出csv数据的时候以utf-8编码格式。
格式统一之后,再load数据到hive中,果然没有出现乱码。
最后吐下槽,我中华5千年,源远流长,为什么编码不待见中文。。。