пытается декодировать данные (экспорт Abs в MySQL) - PullRequest
2 голосов
/ 14 декабря 2010

У меня есть таблица базы данных:

DROP TABLE translation_en_lt;
CREATE TABLE translation_en_lt (
  id INTEGER,
  lt_translation WIDEMEMO BLOBBlockSize 102400 BLOBCompressionAlgorithm ZLIB BLOBCompressionMode 9
);

, которая была сгенерирована с помощью AbsManager (менеджер баз данных Absolute, Delphi).Это кажется устаревшим, однако, и синтаксис недопустим для текущего MySQL.Тогда у меня есть эта запись данных:

INSERT INTO translation_en_lt (lt_translation) values (MimeToBin('cABhAHMAaQBzAGw='));

Значение для этой строки, как правильно отображается в AbsManager, составляет pasislinkti.Однако base64_decode('cABhAHMAaQBzAGw=') возвращает p�a�s�i�s�l [base64_encode('pasislinkti') возвращает cGFzaXNsaW5rdGk=].

Как мне получить 'pasislinkti' из MimeToBin('cABhAHMAaQBzAGw=')?Имеет ли это какое-либо отношение к кодировке, zlib (WIDEMEMO BLOBBlockSize 102400 BLOBCompressionAlgorithm ZLIB BLOBCompressionMode 9)?

Я получил комментарий:

14: 24 VoVo64: guy: выглядит так, как будто закодировано base64данные на самом деле UCS-2 с прямым порядком байтов.декодирование cABhAHMAaQBzAGw = в HEX приводит к 70 00 61 00 73 00 69 00 73 00 6c

Но я уже пробовал iconv('UTF-16', 'UTF-8', base64_decode('cABhAHMAaQBzAGw=')), что привело к:

Notice: iconv(): Detected an incomplete multibyte character in input string in /var/www/ssl/pp.php on line 2 pasis

У меня естьтакже пробовал: mb_convert_encoding($u, 'UCS-2LE', 'UTF-8'), mb_convert_encoding($u, 'UCS-2', 'UTF-8');ни один не работал.

1 Ответ

3 голосов
/ 14 декабря 2010

Это строки Base64:

cABhAHMAaQBzAGw= -> pasisl
cGFzaXNsaW5rdGk= -> pasislinkti

Я думаю, что ваши данные где-то усекаются.Вы должны искать функцию MimeToText () в вашей системе баз данных.Я бы попытался вывести данные в CSV и загрузить их в MySQL, используя LOAD DATA INFILE.Вам, вероятно, придется переписать схемы таблиц вручную.BLOBBlockSize ...., по-видимому, для сжатия этих данных.Ваша новая таблица займет немного больше места, или вы можете посмотреть, используя функцию MySQL Compress ().

Примерно так должно работать:

CREATE TABLE translation_en_lt (
  id INTEGER, 
  lt_translation MEDIUMTEXT, 
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...