DB2 Select Character Issues - PullRequest
       25

DB2 Select Character Issues

3 голосов
/ 25 октября 2011

Я пытаюсь выбрать данные из базы данных DB2, управляемой другим человеком, чтобы я мог вставить их в свою базу данных SQL, которой я управляю, для манипулирования данными.Я использую Java-программу для этого, и программа успешно проверила данные испытаний.Однако я получаю ошибки из-за странных символов в данных db2.Вот мой журнал ошибок.

Incorrect string value: '\xC2\x97D #5...' for column 'Name' at row 1
java.sql.SQLException: Incorrect string value: '\xC2\x97D #5...' for column 'Name' at row 1
INSERT INTO `Temp_Equipment_Inventory`.`PC_Table10i` SET `Account_No`='1019TJ148001',`Inventory_No`='569931',`Building_No`='0060',`Location`='CLASSRM',`FYYR_No`='2004',`Cost`='635.00',`Name`='MICROPHONE LAVALIER WIRELESS  (ISCÂD #5290)                 SHURE MODEL ULXP14/85                                       ',`CDCATY`='   ',`CDSRCE`='M',`FLDCAL`=' ',`CDACQN`='G',`FLOWNR`='Y',`FLSHAR`=' ',`CDDELT`='00',`CNYTDT`='00',`NOPURO`='6870607-01 ',`NOPIMO`='01',`CDPREI`='E',`Original_Amount`='155.00',`Serial_Code`='0309040351          ',`CDCOMP`=' ',`NOCHECK`='680146 ',`CDCOMM`='3651400',`Last_Update`='2008-07-18',`CDDEPT`='148',`Room_No`='0300 ',`Date_Scanned`=NULL,`Date_Acquired`='2004-03-09',`Manufacturer_Name`='SHURE       ',`Expiry_Date`=NULL

Как видите, в столбце «Имя» содержатся данные (ISCÂD # 5290) с забавным выводом ошибки.Однако, когда я просматриваю данные в таблице db2, это не появляется.

Я установил для таблиц mysql значение Unicode UTF-8 ci.

Я не могу редактировать базу данных db2, поскольку она не управляется мной.

Что еще можно сделатьпопытаться обойти этот символ в моих данных?

Ответы [ 4 ]

2 голосов
/ 27 марта 2013

\ xC2 \ x97 - это последовательность байтов UTF-8 для кодирования символов Юникода - (тире em)

Похоже, что Java-код преобразовал данные UTF-8 в UTF-16 (нативную кодировку Java) без их декодирования. Тогда вставка не удалась, потому что кодовые точки UTF-16 для символов и тире на самом деле являются недопустимыми кодовыми точками UTF-8.

Таким образом, возможно, решение состоит в том, чтобы декодировать то, что читается в DB2, с помощью кодека UTF-8, чтобы получить правильное представление UTF-16, прежде чем выполнять вставку, или если целевой базе данных требуется кодировка UTF-8, тогда, возможно, лучшее решение это не пройти через java.String, а просто читать и записывать двоичные данные.

1 голос
/ 02 ноября 2011

Что еще я могу сделать, чтобы попытаться обойти этот символ в моих данных?

  1. Каковы ваши тестовые данные? Это проверено на случаи?

  2. Сделайте фиктивную копию аналогичной базы данных или возьмите образец базы данных в месте нахождения проблемы. Замените символ на \^A.

Я все еще верю, что проблема в вашем java-коде в том, что вы неправильно разбираете вещи. Попробуйте Python или более простой код с Java, чтобы сделать то же самое.

0 голосов
/ 03 ноября 2011

Если вы используете UTF-8 для кодирования, вы можете попробовать добавить следующие параметры в URL-адрес вашего соединения jdbc

<connection_url>?useUnicode=yes&characterEncoding=UTF-8

Вы можете заменить его на кодировку, если UTF-8 неподходит для ваших нужд.

Надеюсь, это поможет.

0 голосов
/ 03 ноября 2011

Пропустите программу Java и используйте предоставленные БД инструменты для перемещения данных.Для DB2 используйте db2 export, чтобы вывести ваши данные в плоский файл.Затем используйте mysqlimport, чтобы загрузить его в MySql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...