我一直在尝试在mysql workbench中上传我的user.txt文件,但它无法正常工作。它成功运行但没有更新行或列。 它返回
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问题,例如 How should I tackle --secure-file-priv in MySQL?
import text file into mysql workbench?
我的user.txt以下列方式拥有超过10,000条记录
UserId|FirstName|LastName|Email|Password|Address
1|John|Doe|johndoe@gmail.com|password|Address
2|John|Doe|johndoe@gmail.com|password|Address
任何人都可以告诉我我在哪里做错了,我该如何解决这个问题。谢谢
答案 0 :(得分:2)
我怀疑LOAD DATA只看到一行,而IGNORE 1 LINES导致整个文件被读作一行。
我建议你找出线路终结器实际上是什么。
在PC / DOS / Windows上,行尾通常是回车符+换行符,在MySQL中表示为'\r\n'
在Unix / Linux上,行尾通常只是'\n'
个字符。
我建议您尝试使用
运行LINES TERMINATED BY '\n'
看看有多大的烟雾。
如果在地址字段的末尾得到回车字符,则表示行终止符可能是PC / DOS / Windows样式
LINES TERMINATED BY '\r\n'
我还没有找到使用'{CR}{LF}'
的线索,这听起来像是我们在w3fools上找到的东西
<强>后续强>
问:&#34; 我尝试使用\n
以及\r
和\r\n
。这些给我的错误说列太大了截断。只有当我执行\\r
或\\n
时,才会运行查询。但是在30秒之后它表示0行受影响。 &#34;
问:&#34; 它在第1行中说截断,因为它包含的数据比输入字段多。但是我需要确切的输入字段。所以我猜测换行不起作用。当我执行'\\r\\n'
时,查询运行但mysql服务器连接丢失。可能是因为我的文件大小? &#34;
答:Data truncated for column
警告表示某个值不适合&#34;进入表中列的分配存储空间。
是否在每个列或某些特定列上发生了这种情况?第一栏?第一行和每一行都发出了警告吗?请注意,警告消息实际上包含列的名称并标识该行。
(我从未真正遇到&#34;列太大&#34; LOAD DATA错误。)
实际警告信息是什么?这是错误还是警告? (MySQL返回的输出不是难以理解的乱码。警告消息包含一些特定的信息。将错误消息的文本翻译成&#34;列太大,它被截断&#34;是不必要的混淆。那个&#39; ;没有帮助你实际诊断问题。
(我想知道您的客户端是否将警告视为错误?从mysql命令行客户端,我们可以发出SHOW WARNINGS语句。)
如果您收到MySQL警告1262 Row n was truncated; it contained more data than there were input columns
,那么这意味着LOAD DATA在文件的行中看到的字段多于表中的列数。
考虑在LOAD DATA语句中明确列出列;那些&#34;排队&#34;与文件中的字段。请注意,我们可以在列表中包含用户定义的变量
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
( `userid`
, `firstname`
, `lastname`
, `email`
, `password`
, `address`
, @field7
, @field8
)
第一个字段将加载到第一个列出的标识符中,在本例中为userid
,作为userid
表中名为main.users
的列的引用。第二个字段将加载到第二个列出的列firstname
。
前缀为符号符号@
的标识符是对用户定义变量的引用,而不是表中的列。
不要将'\\n'
指定为行分隔符;这将导致LOAD DATA搜索一个文字反斜杠字符,然后紧跟一个&#34; n&#34;。
换行符在MySQL字符串文字中表示为'\n'
。
这应该可以识别线的末端。我们遇到的问题是,如果它是一个DOS / Windows PC格式的文件,那么它将成为一个回车字符,如果我们不指定它作为行终止符的一部分,那个回车字符将成为最后一个字段的一部分,我们可能不想要。
如果我们不确定,并且无法说明,那么请进行此测试,仅指定换行符作为行终止符。
如果我们知道行终止符是DOS / Windows PC风格的'\r\n'
,那么我们可以继续并指定它。
(如果该字符串通过bash shell传递,或者其他编程语言解释字符串并在传递给MySQL之前吞下反斜杠字符,我们只需要转义该反斜杠字符。我们不会遇到MySQL命令行客户端中的那个问题。)
我强烈建议我们创建一个较小的文件来测试,可能只包含五行......标题行和四行数据。