我需要将大量(24MB)文本文件导入MySQL表.每一行看起来像这样:
1 1 0.008 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
每个字段后面有一个或多个空格,最后一个字段在换行符之前被约36个空格.
如何将这样的文件导入MySQL?从文档中可以看出,LOAD DATA期望所有字段都以完全相同的字符串终止.我试过了
LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ' ';
Run Code Online (Sandbox Code Playgroud)
但MySQL将解释一个多个空格的序列作为分隔空字段.
有任何想法吗?
我有一个csv文件,我试图通过命令行导入.但是只插入了一行.它们是逗号分隔的值.我在使用Excel Mac的Mac上.我保存为csv文件.如何判断行是由\ r还是\n或两者终止?这是我使用的代码:
LOAD DATA LOCAL INFILE '/Users/eric/Documents/contacts_test.csv' INTO TABLE `contacts_tmp` FIELDS TERMINATED BY ',' ESCAPED BY '\\' LINES TERMINATED BY '\n' (clientid,contactid,title,fname,mname,lname,suffixname,salutation,occupation,employer,home_addr1,home_addr2,home_city,home_state,home_zip,home_county,primary_addr1,primary_addr2,primary_city,primary_state,primary_zip,primary_county,work_addr1,work_addr2,work_city,work_state,work_zip,work_county,email,phone_home,phone_mobile,phone_work,fax,phone_other,codes);
Run Code Online (Sandbox Code Playgroud)
谢谢
有没有办法在LOAD DATA INFILE中动态指定文件名?是否可以像例如参数一样(语法可能不正确)进行参数化LOAD DATA INFILE'$ filename'?
我有一张叫做城市的桌子:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| country_id | mediumint(9) | NO | MUL | NULL | |
| region_id | bigint(20) | NO | MUL | NULL | |
| city | varchar(45) | NO | | NULL | |
| latitude | float(18,2) | NO | | NULL | |
| longitude | float(18,2) | …Run Code Online (Sandbox Code Playgroud) 我有一个csv文件,里面有几千个游戏日期,但它们都是MM/DD/YYYY格式
2/27/2011,3:05 PM,26,14
Run Code Online (Sandbox Code Playgroud)
(26和14是团队ID #s),并尝试将它们放入SQL中,这只会导致将0000-00-00放入我的表的日期字段中.这是我尝试使用的命令:
LOAD DATA LOCAL INFILE 'c:/scheduletest.csv' INTO TABLE game
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(`date`, `time`, `awayteam_id`, `hometeam_id`);
Run Code Online (Sandbox Code Playgroud)
但同样,它不会做正确的日期.有没有办法让它在尝试插入日期时转换日期?我发现了另一个与此类似的问题,但我无法让它发挥作用.
我想把LOAD DATA INFILE用作sotred程序,但似乎无法完成.然后我尝试了通常的方式将代码嵌入到应用程序本身,就像这样,
conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd = conn.CreateCommand();
string tableName = getTableName(serverName);
string query = "LOAD DATA INFILE '" + fileName + "'INTO TABLE "+ tableName +" FIELDS TERMINATED BY '"+colSep+"' ENCLOSED BY '"+colEncap+"' ESCAPED BY '"+colEncap+"'LINES TERMINATED BY '"+colNewLine+"' ("+colUpFormat+");";
cmd.CommandText = query;
cmd.ExecuteNonQuery();
conn.Close();
Run Code Online (Sandbox Code Playgroud)
生成的查询保存在字符串变量查询中,
LOAD DATA INFILE 'data_file.csv'INTO TABLE tbl_shadowserver_bot_geo FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'LINES TERMINATED BY '\n' (timestamp,ip,port,asn,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,url,agent,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy);
Run Code Online (Sandbox Code Playgroud)
但现在当我运行该程序时,它给出了一个错误说,
MySQLException(0x80004005) Parameter @dummy must …Run Code Online (Sandbox Code Playgroud) 我有一个 csv 文件,我正在使用该load local infile命令将其加载到 mysql 数据库中。
csv 有一组从 5 个值的枚举中收集的字段,我需要基于这些进行查询。为了加快查询速度(可能高达 600 万行),我试图在参考表上进行选择以插入一个 id 而不是字符串值。
load data local infile 'test_file.csv'
into table matching
fields terminated by ','
enclosed by '"'
(... @match, ...)
set
...
match = select id from matchRefData where name = @match,
...;
Run Code Online (Sandbox Code Playgroud)
根据http://dev.mysql.com/doc/refman/5.1/en/load-data.html子查询可以在 set 操作的右侧使用,但似乎每次都失败:
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 …Run Code Online (Sandbox Code Playgroud) 我有以下示例 json 文件,我正在尝试用它填充 MySQL 表。由于 MySQL 5.7 支持 json 作为本机数据类型,我认为这应该不是问题,但是 MySQL 的 json 验证器似乎在文件内的换行符方面存在问题。一旦我摆脱了所有换行符并将我的示例文件写在一行中,它就会完美运行。
[
{
"somestuff": [
{
"field1": "val1",
"field2": 17,
"field3": 27,
"field4": 42,
"field5": 73
},
{
"field1": "val2",
"field2": 3,
"field3": 12,
"field4": 13,
"field5": 100
}
],
"field0": "image",
"path": "some path"
}
]
Run Code Online (Sandbox Code Playgroud)
我知道 json 本身在包含反斜杠的字符串方面存在问题,但是即使在写入任何类型的单词而不是路径时,MySQL json 验证器仍然无法完全读取 json 文件并且只是在第一个换行符之前停止。我仍然收到以下错误:
Error Code: 3140. Invalid JSON text: "Invalid value." at position 1 in value (or column) '['.
Run Code Online (Sandbox Code Playgroud)
使用以下查询时:
-- create test table for json …Run Code Online (Sandbox Code Playgroud) 我在MySQL中运行LOAD DATA INFILE命令,其中一个文件在mysql提示符下显示错误.
如何查看警告和错误?现在我唯一要做的就是提示在导入时报告65,535个警告.
mysql> use dbname;
Database changed
mysql> LOAD DATA LOCAL INFILE '/dump.txt'
-> INTO TABLE table
-> (id, title, name, accuracy);
Query OK, 897306 rows affected, 65535 warnings (16.09 sec)
Records: 897306 Deleted: 0 Skipped: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
我如何让mysql向我展示这些警告是什么?我查看了错误日志,但我找不到它们.运行"SHOW WARNINGS"命令仅返回64个结果,这意味着剩下的65,000个警告必须在其他地方.
2 |
| Warning | 1366 | Incorrect integer value: '' for column 'accuracy' at row 2038
3 |
| Warning | 1366 | Incorrect integer value: '' for column 'accuracy' at row 2038
4 |
| …Run Code Online (Sandbox Code Playgroud) 我有一个XML文档,格式为...
<?xml version="1.0" encoding="UTF-8"?>
<yahootable>
<row>
<various><![CDATA[ multiline
text, "&"
other <stuff> ]]>
</various>
<id>1</id>
<message><![CDATA[
sdfgsdfg
dsfsdfsd ]]>
</message>
</row>
<yahootable>
Run Code Online (Sandbox Code Playgroud)
...并且想要使用MySQL的LOAD XML LOCAL INFILE将其插入具有列的表中;(各种,ID,消息)。我似乎无法从未解析的CDATA标记中获取任何数据到数据库列中。是CDATA标记之间的数据被完全忽略,还是我错过了某些事情?我期望CDATA会转义非法的XML字符并将其作为常规文本插入。
谢谢。
load-data-infile ×10
mysql ×10
sql ×2
c# ×1
cdata ×1
json ×1
mysql-5.7 ×1
mysqlimport ×1
xml ×1