问题: 建表时发现hive建表语句有中文乱码的现象
定位: hive的元数据都是存储在mysql上维护的。 可以修改hive元数据的字符集为utf-8.
解决方案: 1.修改hive-site.xml配置文件的参数内容 set jdbc:mysql://crxy99:3306/hive_cz3q?createDatabaseIfNotExist=true; 注意:hive的元数据metastore在mysql的数据库,不管是数据库本身,还是里面的表编码都必须是latin1(CHARACTER SET latin1 COLLATE latin1_bin) 2.修改mysql 配置文件/etc/my.cnf 离线时: [client]下面增加 default-character-set=utf8 在[mysqld]下面增加 default-character-set=utf8 init_connect=‘SET NAMES utf8’ –重启mysql service mysqld restart 在线时: 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 –重启mysql service mysqld restart –验证编码是否修改 show variables like ‘char%’;
3.进入数据库 Metastore 中执行以下 5 条 SQL 语句 修改表字段注解和表注解 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; 4.修改 metastore 的连接 URL javax.jdo.option.ConnectionURL jdbc:mysql://IP:3306/db_name?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8 JDBC connect string for a JDBC metastore