在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
加载数据时是否可以压缩数据?
答案 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}] ...]