2010-12-14 25 views
2

我有數據庫表:試圖解碼數據(出口阿布斯到MySQL)

DROP TABLE translation_en_lt; 
CREATE TABLE translation_en_lt (
    id INTEGER, 
    lt_translation WIDEMEMO BLOBBlockSize 102400 BLOBCompressionAlgorithm ZLIB BLOBCompressionMode 9 
); 
其用AbsManager(絕對數據庫管理器,德爾福)產生

。它似乎已經過時了,而且語法對於當前的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=]。

我如何從MimeToBin('cABhAHMAaQBzAGw=')獲得'pasislinkti'?它與編碼有什麼關係,zlib(WIDEMEMO BLOBBlockSize 102400 BLOBCompressionAlgorithm ZLIB BLOBCompressionMode 9)?

我評論說:

14:24 VoVo64:傢伙:看起來好像 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');沒有工作。

回答

3

這些Base64編碼字符串:

cABhAHMAaQBzAGw= -> pasisl 
cGFzaXNsaW5rdGk= -> pasislinkti 

我想你的數據被截斷的地方。你應該在數據庫系統中尋找一個MimeToText()函數。我試圖將數據轉儲到CSV並使用LOAD DATA INFILE加載到MySQL中。您可能必須手動重寫表格模式。 BLOBBlockSize ....似乎用於壓縮此數據。你的新表格需要更多的空間,或者你可以使用MySQL的Compress()函數進行研究。

像這樣的東西應該工作:

CREATE TABLE translation_en_lt (
    id INTEGER, 
    lt_translation MEDIUMTEXT, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8