当前位置: 首页 > 知识库问答 >
问题:

将文件插入SQL字段并提取回文件

壤驷宏才
2023-03-14

我创建了简单的表:

SHOW DATABASES;
CREATE DATABASE observe;

USE observe;

CREATE TABLE `see_me` (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
name VARCHAR(20),
food VARCHAR(30),
confirmed CHAR(1), 
signup_date DATE,
file_contents LONGBLOB // or VARBINARY(MAX)
);

和一个名为t.txt.的文件如何将文件插入到字段中file_contentssql命令并将其提取到文件中?

插入物可能类似于

 INSERT INTO see_me(id, file_contents) 
 SELECT '1', BulkColumn FROM OPENROWSET (BULK '/Users/usr_00/lab/t.txt', SINGLE_BLOB) as ...;

有人能提供建议吗?

共有3个答案

穆季萌
2023-03-14

工作了很多后,下面的事情对我有用。第一件事是我们必须确保我们是否有正确的权限从特定的目录中读取文件。对我来说,它不在那里。所以我换了一些文件。

>

  • 我去了这个位置(C:\Program Data\MySQL\MySQL Server 8.0\my.ini)并检查了路径secure-file-priv="C:/Program Data/MySQL/MySQL Server 8.0/Uploads"和这个位置我创建了一个文件"check.txt"在其中我有内容。

    我去mysql工作台检查了一些属性。运行以下命令

    显示全局变量,如“局部填充”;

    如果它显示OFF,我们必须使用以下命令打开它。

    SET GLOBAL local_infile=1;
    

    现在让我们检查secure-file-priv的目录,它应该'C:/Program Data/MySQL/MySQL Server 8.0/Uploads/上传'运行以下命令

    显示变量,如“secure_file_priv”//您将看到路径为“C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Uploads”

    到目前为止,我们改变了属性。现在,我们准备读取文件和使用mysql创建文件。

    >

  • 从txt文件读取数据(我已经在"C:/Program Data/MySQL/MySQL Server 8.0/Uploads"中创建了check.txt)。后来创建了一个临时表,其中我将数据存储在check.txt

    CREATE TEMPORARY TABLE foo (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,content 
    longblob); // created temporary table called "foo"
    
    // reading the data from txt file
    
    LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/check.txt'
    INTO TABLE foo 
    #FIELDS TERMINATED BY '' ENCLOSED BY '' ESCAPED BY ''
    LINES STARTING BY '' TERMINATED BY '' // mysql creates new record for every line
    (content); 
    
     //by running above command entire txt data came to content column (mysql created only 1 row bcz we didn't mention lines terminated by. So it will copy entire txt data in 1st row of "content" column of "foo" table)
    

    将内容写入文件(在“C:/ProgramData/MySQL/MySQL Server 8.0/Uploads”目录下)

    SELECT * FROM foo
    INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/out.txt'; // out.txt will automatically created by mysql
    

    通过运行上述命令,您可以执行读写操作。您可以在“see_me”表中使用上述“foo”表数据并执行读或写操作。

    data from "foo" table where id="1" into "see_me" table (file_contents)
    

    下面的链接帮助了我。

    MySQL错误留档

    在mac和ubuntu中设置安全文件priv

    my.cnf文件在mac

    我的cnf位置

  • 韶英达
    2023-03-14

    尝试,如在这里检查MySql有上传访问权限,如手册中指定的:

    select @@secure_file_priv;
    

    如果secure_file_priv系统变量设置为非空目录名,则要加载的文件必须位于该目录中
    (在MySQL 8.0.17之前,文件必须是所有人都可读的,而不仅仅是服务器可读的。)

    在Windows上,您必须转义\,如以下答案所示

    马俊
    2023-03-14

    您可以使用帮助LOAD_file功能将文件内容插入字段。例如:

    INSERT INTO see_me (file_contents)
    VALUES (LOAD_FILE('/var/lib/mysql-files/myfile.txt'));
    

    或者在更新查询中

    UPDATE see_me
    SET file_contents = LOAD_FILE('/var/lib/mysql-files/myfile.txt');
    

    如果要将文件内容提取到新文件中,可以使用SELECT。。放入转储文件。例如:

    SELECT file_contents INTO DUMPFILE '/var/lib/mysql-files/myfile.txt'
    FROM see_me
    WHERE id = <your_id>;
    

    但是,正如@VonC所说,请记住,如果secure_file_priv系统变量为非空,您应该使用仅位于定义目录中的文件

     类似资料:
    • 问题内容: 我想从各种目录中读取日志文件,例如:… 具有子目录… 分别在这些子目录中。 所以我正在考虑读取这样的文件: 但是,我很难过滤它们,即要知道对于哪个服务器()和日志类型(),我必须应用以下模式: 例如:我想做这样的事情 上面是用于日志文件(不是cronLog目录)。但是,这样的我也想过滤器上的每个服务器都会有,等日志。 如何同时过滤? 有没有办法从输入中获取目录名称?从这里喜欢 我应该如

    • 我想使用PHP将大的xml值插入到sql中。 我可以用PHP做这个工作吗?我该怎么做呢? 谢谢

    • 本文向大家介绍PHP执行SQL文件并将SQL文件导入到数据库,包括了PHP执行SQL文件并将SQL文件导入到数据库的使用技巧和注意事项,需要的朋友参考一下 上面text.sql是你需要执行的sql文件,DB_HOST主机名,DB_USER用户名,DB_PASS密码! 这只是最基本的自动执行sql文件,你还可以自定义生成数据库的名称,方法就是将sql文件中下面的代码删去 USE 数据库名 然后在te

    • 本文向大家介绍SQL Server 提取数字、提取英文、提取中文的sql语句,包括了SQL Server 提取数字、提取英文、提取中文的sql语句的使用技巧和注意事项,需要的朋友参考一下

    • 我必须准备一个SQL插入文件,它将数据从测试导出到生产实例。其中一列是表中的CLOB。 当我在UAT实例中进行测试运行时,我得到以下错误 SQL脚本是我唯一的选择。 更新1 如果将insert语句保存在一个名为test.sql的文件中,并试图从SQLPLUS以@d:\temp\test.sql的形式执行,则会出现错误 Insert语句

    • 问题内容: 我正在尝试运行一个应用程序(例如),因此它将从文件中读取stdin并从stdout写入另一个文件。 目前我有 它可以按预期工作,因为我可以对该文件进行某些操作,并且top可以接收它。但是我无法重定向top的输出。我该如何实现? 编辑: 好吧,让我们从头开始。我正在测试: 问题答案: 让我们忘掉这似乎是一条红色的鲱鱼。 要将stdin或stdout映射到文件,可以使用重定向: 甚至: