我有一个包含二进制类型列的表。
---------------+---------+----------+-------------+
| 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提示符
运行此命令时答案 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);
当然,如果您一开始就有不好的数据,则需要确切地知道什么是不好的,以及如何撤消使它变得糟糕的操作。