我一直试图上传我的user.txt文件在mysql工作台,但它不工作。它成功运行,但没有更新任何行或列。它回来了
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\user.txt'
INTO TABLE main.users
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '{CR}{LF}'
IGNORE 1 LINES 0 row(s) affected
Records: 0 Deleted: 0 Skipped: 0 Warnings: 0 24.860 sec
我要执行的代码是
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\user.txt'
INTO TABLE main.users
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '{CR}{LF}'
IGNORE 1 LINES;
如果我给路径名 C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\user.txt
它抛出错误
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 0.000 sec
我还尝试更改由'\r\n'和'\r\n'指定的行,但没有任何效果。我还尝试了跟踪所有关于这个问题的stackoverflow问题,比如我应该如何处理mysql中的secure file priv?
将文本文件导入mysql工作台?
my user.txt有10000多条记录,如下所示
UserId|FirstName|LastName|Email|Password|Address
1|John|Doe|johndoe@gmail.com|password|Address
2|John|Doe|johndoe@gmail.com|password|Address
谁能告诉我哪里做错了,我怎么才能解决这个问题。谢谢您
1条答案
按热度按时间oxiaedzo1#
我怀疑load data只看到一行,而ignore 1行导致整个文件作为一行读取。
我建议你弄清楚行终止符到底是什么。
在pc/dos/windows上,行尾通常是回车+换行符,在mysql中表示为
'\r\n'
在unix/linux上,行尾通常是'\n'
性格。我建议你试着和我一起跑步
看看这个烟球有多大。
如果在地址字段的末尾有回车符,这意味着行终止符可能是pc/dos/windows风格的
我一点也不知道你是怎么想到用
'{CR}{LF}'
听起来像是我们在傻瓜身上发现的后续行动
问:“我试过了
\n
还有\r
以及\r\n
. 这让我错误地说,列太大,它被截断了。只有我知道的时候\\r
或者\\n
然后只运行查询。但30秒后显示0行问:“它说在第一行截断,因为它包含更多的数据,然后输入字段。但我有确切数量的输入字段,因为它需要。所以我猜断线是行不通的。当我这么做的时候
'\\r\\n'
然后运行查询,但mysql服务器连接丢失。是不是因为我的文件太大?”a:那家公司
Data truncated for column
警告意味着一个值没有“适合”表中列的分配存储。这是发生在每一列,还是某些特定的列上?第一列?第一排和每一排都有警告吗?请注意,警告消息实际上包含列的名称并标识行。
(我从来没有遇到过加载数据时出现“列太大”的错误。)
实际的警告信息是什么?是错误还是警告(mysql返回的输出并不是难以理解的胡言乱语。警告消息包含一些特定信息。将错误消息的文本转换为“列太大,已截断”是不必要的混淆。这对你诊断问题没有帮助。
(我想知道您的客户是否将警告作为错误处理?从mysql命令行客户端,我们可以发出show warnings语句。)
如果你得到mysql警告1262
Row n was truncated; it contained more data than there were input columns
,则这意味着加载数据在文件的行中看到的字段多于表中的列数。考虑显式列出loaddata语句中的列;这些字段与文件中的字段“对齐”。请注意,我们可以在列表中包含一个用户定义的变量
第一个字段将加载到第一个列出的标识符中,在这种情况下,
userid
作为对名为userid
在main.users
table。第二个字段将加载到第二个列出的列中firstname
.带有at符号前缀的标识符
@
是对用户定义变量的引用,而不是表中的列。不指定
'\\n'
作为行分隔符;这将导致加载数据搜索紧跟“n”的反斜杠字符。换行符在mysql字符串文字中表示为
'\n'
.这应该可以用来确定线路的尽头。我们的问题是,如果它是dos/WindowsPC格式的文件,将有一个回车字符,如果我们不指定作为行终止符的一部分,回车字符将是最后一个字段中包含的字符,这可能是我们不想要的。
如果我们不确定,也说不出,那么测试一下,只指定换行符作为行终止符。
如果我们知道行终止符是dos/windowspc风格的
'\r\n'
,然后我们可以继续具体说明。(如果字符串正在通过bashshell或其他解释字符串并在将反斜杠字符传递到mysql之前吞下它们的编程语言传递,那么我们只需要对该反斜杠字符进行转义。我们在mysql命令行客户机中没有遇到这个问题。)
我强烈建议我们创建一个较小的文件来测试,也许只包含五行。。。标题行和四个数据行。