mysql&选择进入OUTFILE - 将二进制数据写入文件

时间:2012-01-21 04:53:34

标签: php mysql

我有一个包含二进制类型列的表。

---------------+---------+----------+-------------+
| appid | imei             | request_timestamp | city_id | state_id | country_id  |
+-------+------------------+-------------------+---------+----------+------------+-----------+
| 45861 | 101111000110     |        1327119595 |     700 |       43 |          5      |
| 93502 | 1000011001010    |        1327119595 |     305 |      490 |          9 |      |
+-------+------------------+-------------------+---------+----------+------------+-------

SELECT * INTO OUTFILE 'test.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'  LINES TERMINATED
 BY '\n'  FROM log_track_tbl_382 ,the csv file has data in the form 

45861,"101111000110\0\0\0\0",1327119595,700,43,5
93502,"1000011001010\0\0\0",1327119595,305,490,9

二进制列未以适当的格式写入txt文件。 任何人都可以建议什么应该是正确的mysql命令来保存文件中的二进制数据。 当我从mysql提示符

运行此命令时

2 个答案:

答案 0 :(得分:4)

尝试使用DUMPFILE代替OUTFILE

OUTFILE上选择此选项会导致查询结果被写为单行,省略列或行终止。这在导出二进制数据(如图形或Word文件)时很有用。请记住,导出二进制文件时无法选择OUTFILE,否则文件将被破坏。

要求DUMPFILE查询必须以单行为目标;合并两个二进制文件的输出没有任何意义,如果你尝试它将会返回一个错误。

答案 1 :(得分:0)

要导出,您可以对二进制列进行编码:

SELECT appid, to_base64(imei), request_timestamp, city_id, state_id, country_id
FROM some_table
INTO OUTFILE 'test.txt' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'  LINES TERMINATED BY '\n'
FROM log_track_tbl_382

然后要导入,您将必须解码二进制数据

LOAD DATA LOCAL INFILE 'test.txt' INTO TABLE some_table;

UPDATE some_table SET imei = from_base64(imei);

当然,如果您一开始就有不好的数据,则需要确切地知道什么是不好的,以及如何撤消使它变得糟糕的操作。