3

我想做一个select * from x into outfile 'c:/test.csv'.
但是,我不想将其保存到 outfile test.csv 中,而是将其保存到 blob 字段中。

我从Windows上的客户端开始查询。
MySQL 服务器位于 Windows 或 Linux 上的服务器上(两者都可以)。
但我想拥有文件客户端,而不是服务器上的某个地方。

BTW
用 Delphi 2007 编写的客户端软件,使用 ZEOS 连接到远程服务器上的 MySQL 数据库。

如何获取 outfile 客户端,而不是服务器端?

4

2 回答 2

3

Johan,MySql 从正在运行的服务器执行这句话。在客户端创建文件的唯一方法是传递指向客户端计算机的共享文件夹位置和文件名。MySQL 服务(守护程序)所有者还必须拥有足够的权限才能写入目标目录。

来自 Mysql文档

SELECT ... INTO OUTFILE 语句的主要目的是让您非常快速地将表转储到服务器机器上的文本文件中。如果要在服务器主机以外的其他主机上创建结果文件,通常不能使用 SELECT ... INTO OUTFILE,因为无法写入相对于服务器主机文件系统的文件路径。

但是,如果远程机器上安装了 MySQL 客户端软件,您可以改为使用 mysql -e "SELECT ..." > file_name 等客户端命令在客户端主机上生成文件。

如果可以使用服务器文件系统上的网络映射路径访问远程主机上的文件位置,那么也可以在服务器主机以外的不同主机上创建结果文件。在这种情况下,目标主机上不需要存在 mysql(或其他一些 MySQL 客户端程序)。

于 2011-04-20T13:06:03.823 回答
1

好的,如果人们想知道我对 TMS DBAdvGrid 做了一个解决方法来导出 CSV 文件。

我向 TAdvStringGrid 添加了一个新属性

public {properties}
property HideCSVHeader: boolean read FHideCSVHeader write FHideCSVHeader;

并更改了以下代码:

procedure TAdvStringGrid.OutputToCSV(FileName:String;appendmode: Boolean; 
  Unicode: boolean);
....
//changed this code further down the procedure:
//for z := SaveStartRow to SaveEndRow do 
//Into:

MyStartRow:= SaveStartRow;
if HideCSVHeader then Inc(MyStartRow);
for z := MyStartRow to SaveEndRow do   

然后当我打电话

procedure TForm1.BtnExportClick(Sender: TObject);
var
  Filename: string;
  succes: Boolean;
begin
  succes:= True;
  if ExportSaveDialog.Execute then begin
    Filename:= ExportSaveDialog.FileName;
    try
      DBGridExportExact.Delimiter:= ';';
      DBGridExportExact.AlwaysQuotes:= True;
      DBGridExportExact.QuoteEmptyCells:= True;
      DBGridExportExact.SaveHiddenCells:= True;
      DBGridExportExact.HideCSVHeader:= True;
      DBGridExportExact.SaveToCSV(bestandsnaam);
    except
      succes:= False;
    end;
    if not(succes) then StatusLabel.Caption:= 'Error bla bla';
  end;
end;
于 2011-04-20T21:01:58.720 回答