hp vertica中的编码

The coding in hp vertica

我在 OS Linux CentOS 6.6 版(最终版)上安装了最新版本的免费 hp vertica 服务器。接下来,我设置了一个服务器并创建了一个数据库 IM_0609。接下来,我使用以下命令创建了一个 table:

CREATE TABLE MARKS (SERIAL_NUM  varchar(30),PERIOD smallint,MARK_NUM decimal(20,0), END_MARK_NUM decimal(20,0),OLD_MARK_NUM decimal(20,0),DEVICE_NAME varchar(256),DEVICE_MARK varchar(256),CALIBRATION_DATE date);

接下来,我从 DB2 数据库执行 EXPORT 数据到 txt 文件:

5465465|12|+5211.|+5211.||Комплексы компьютеризированные самостоятельного предрейсового экспресс-обследования функционального состояния машиниста, водителя и оператора|ЭкОЗ-01|2004-12-09
5465465|12|+5211.|+5211.||Спектрометры эмиссионные|Metal Lab|2004-12-09
б/н|12|+5207.|+5207.|+5205.|Спектрометры эмиссионные|Metal Lab|2004-12-09
б/н|12|+5207.|+5207.|+5205.|Спектрометры эмиссионные|Metal Test|2004-12-09
....

并且我将文件编码更改为 UTF-8。 然后,我使用 hp vertica 将文本文件中的数据导入数据库 table,此命令:

copy MARKS from '/home/dbadmin/result.txt' delimiter '|' null as '' exceptions '/home/dbadmin/copy-error.log' ABORT ON ERROR;

所有数据加载完毕,但俄语字符显示一些奇怪的字符,显然这是由于命令 COPY 的字符编码问题。

5465465 12  5211    5211    (null)  Êîìïëåêñû êîìïüşòåğèçèğîâàííûå ñàìîñòîÿòåëüíîãî ïğåäğåéñîâîãî ıêñïğåññ-îáñëåäîâàíèÿ ôóíêöèîíàëüíîãî ñîñòîÿíèÿ ìàøèíèñòà, âîäèòåëÿ è îï  İêÎÇ-01 2004-12-09
5465465 12  5211    5211    (null)  Ñïåêòğîìåòğû ıìèññèîííûå    Metal Lab   2004-12-09

问题:如何解决这个问题?

确保您的文件编码为我们 utf-8

[dbadmin@DCG023 ~]$ file rus
rus: UTF-8 Unicode text

[dbadmin@DCG023 ~]$ cat rus
5465465|12|+5211.|+5211.||Комплексы компьютеризированные самостоятельного предрейсового экспресс-обследования функционального состояния машиниста, водителя и оператора|ЭкОЗ-01|2004-12-09
5465465|12|+5211.|+5211.||Спектрометры эмиссионные|Metal Lab|2004-12-09
б/н|12|+5207.|+5207.|+5205.|Спектрометры эмиссионные|Metal Lab|2004-12-09
б/н|12|+5207.|+5207.|+5205.|Спектрометры эмиссионные|Metal Test|2004-12-09

加载数据

[dbadmin@DCG023 ~]$ vsql
Password:
Welcome to vsql, the Vertica Analytic Database interactive terminal.

Type:  \h or \? for help with vsql commands
       \g or terminate with semicolon to execute query
       \q to quit

(dbadmin@:5433) [dbadmin] > copy MARKS from '/home/dbadmin/rus' delimiter '|' null as ''  ABORT ON ERROR;
 Rows Loaded
-------------
           4
(1 row)

查询数据

(dbadmin@:5433) [dbadmin] > select * from Marks;
 SERIAL_NUM | PERIOD | MARK_NUM | END_MARK_NUM | OLD_MARK_NUM |                                                              DEVICE_NAME                                                               | DEVICE_MARK | CALIBRATION_DATE
------------+--------+----------+--------------+--------------+----------------------------------------------------------------------------------------------------------------------------------------+-------------+------------------
 5465465    |     12 |     5211 |         5211 |              | Комплексы компьютеризированные самостоятельного предрейсового экспресс-обследования функционального состояния машиниста, водителя и оп | ЭкОЗ-01     | 2004-12-09
 5465465    |     12 |     5211 |         5211 |              | Спектрометры эмиссионные                                                                                                               | Metal Lab   | 2004-12-09
 б/н        |     12 |     5207 |         5207 |         5205 | Спектрометры эмиссионные                                                                                                               | Metal Lab   | 2004-12-09
 б/н        |     12 |     5207 |         5207 |         5205 | Спектрометры эмиссионные                                                                                                               | Metal Test  | 2004-12-09
(4 rows)