发布日期:2014-12-25 13:55:41

使用select ... into outfile 'filename' 可以把数据库中表或视图中的数据按某种格式导出到文件中。

使用load data infile 'filename' into table tble_name这是把文件中的数据导入到数据库的表中。

在使用load data infile 'filename' into table时遇到了下面的错误:

例:

load data infile "/test/test_view.csv" into table test_view fields terminated by ',';

错误:ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns

这个错误网上查看有很多原因,我这里是原因其实很低级,test_view其实是一个view.字段不匹配。(很低级,时间长了没有意识到这个一个view:()

 

一些注意事项:

语法:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (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,...)]
    [SET col_name = expr,...]

如果PARTITION 这个选项使用时,文件的某些数据行不能满足指定的分区时,就会出现错误:Found a row not matching the given partition set. 

如果CHARACTER SET选项使用时,这样就可以指定文件使用的字符集。默认解析文件中的数据时使用数据库的默认字符集(由系统变量character_set_database指定的字符集来处理,注意不是客户端系统变量character_set_client来处理的)。ucs2, utf16, utf16le, or utf32这些字符集是不能使用的,所以要保证你的文件没有使用这些字符集。如何查看系统中字符集信息。:

show variables like '%char%';

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | E:\MySQL\MySQL Server\share\charsets\ |
+--------------------------+-------------------------------------------+
8 rows in set (0.02 sec)

如果没有设置Fields和lines选项,这其效果等同于使用tab分隔字段,使用双反斜杠代表文件中的一个反斜杠字符。,每个字段没有使用任何引号来包含。换行符判断符为\n。注意如果文件是在windows系统中生成的,你可能需要只能Lines terminated by '\r\n'。因为windows系统中使用'\r\n'作为换行符。

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY ''

如果使用IGNORE number {LINES | ROWS}选项,可以指定从number+1行开始读数据。如在文件数据的第一行为table header的时候,就可以使用ignore 1 lines来实现从第二行开始读数据。

通过设定列名或自定义变量列表(col_name_or_user_var,...),来指定导入到相应的列中。

例如:LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

例如:


LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @var1)
  SET column2 = @var1/100;

SET子句用来补充那些不能从文件中获取的值。

 

你可能遇到的错误:

ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 这个就是字符集的问题,通过character set来设置文件使用的字符集即可解决。

ERROR 1261 (01000): Row 2 doesn't contain data for all columns 这个顾名思义就是缺少数据。查看文件解决。

更多详细资料请看 http://dev.mysql.com/doc/refman/5.6/en/load-data.html

发表评论