MySQL:使用LOAD DATA时将数据压缩在一列中

时间:2018-08-24 12:05:16

标签: mysql csv blob

在MySQL数据库中,我正在使用BLOB字段来存储潜在的长文本字符串中的某些压缩数据,有时我希望将其显示给Web应用程序的用户,但永远不会将其搜索到或其他任何东西,基本思想就是节省磁盘空间。

我正在尝试使用LOAD DATA和tsv文件填充表格。问题是,我正在使用包含 text 的列表文件,但是其中一列(BLOB一列)需要压缩。

我尝试了以下操作,但没有成功。在此示例中,table_name.tsv tsv文件包含我要插入到table_name中的数据,并且我要压缩的文本在列col4中。

mysql -h <host> -u <user> -p <pwd> <db_name>  --execute="LOAD DATA LOCAL INFILE 'table_name.tsv' INTO TABLE table_name(col1, col2, col3, @col4_comp_data) SET col4=COMPRESS(@col4_comp_data) FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' IGNORE 1 LINES; SHOW WARNINGS"

我得到的错误是:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' IGNORE 1 LINES' at line 1

是否知道在用LOAD DATA加载数据时是否可以压缩数据?

1 个答案:

答案 0 :(得分:0)

您的语法顺序错误。
LINES TERMINATED BY '\\n' IGNORE 1 LINES部分需要在列设置部分之前。

正确的顺序是

BNF(Backus–Naur形式)代码

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT},
        [, col_name={expr | DEFAULT}] ...]

来源http://dev.mysql.com/doc/refman/8.0/en/load-data.html