gpt4 book ai didi

mysql - Delphi 和二进制字符集(适用于 MySQL)

转载 作者:行者123 更新时间:2023-11-29 00:55:06 25 4
gpt4 key购买 nike

我需要将大的 xls 文件导入 MySQL 库。我尝试使用“LOAD DATA INFILE”构造。 xls 中的数据包含西里尔字符,因此我遇到了一些问题。我手动创建转储文件,但“LOAD DATA INFILE”不加载西里尔字符。 MySQL 指令“SELECT ... INTO OUTFILE”工作完美,但我无法使用它,因为我需要从“SELECT ... INTO OUTFILE”导入带有二进制字符集的保存文件,我如何使用 Delphi 2009 执行此操作?

我的代码:

procedure TfmImportGoods.btnImportClick(Sender: TObject);
var
sToFile: TStringStream;
sTemp: AnsiString;

function FixString(s: String): String;
begin
Result := s;
Result := SysUtils.StringReplace(Result, #10, '', [rfReplaceAll]);
Result := SysUtils.StringReplace(Result, #13, '', [rfReplaceAll]);
end;

begin
fmMain.MyScript.SQL.Text := 'TRUNCATE TABLE goods';
fmMain.MyScript.Execute;

adoImport.Close;
adoImport.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
fmMain.dlgOpenGoods.FileName+
';Mode=ReadWrite|Share Deny None;Extended Properties=Excel 8.0;Persist Security Info=False';

adoImport.SQL.Text := 'SELECT * FROM ['+lbTables.Items[0]+']';
adoImport.Open;

sTemp := '';
try
while not adoImport.Eof do
begin
sTemp := sTemp +
#9+adoImport.FieldByName('Код').AsString+#9+
adoImport.FieldByName('Производитель').AsString+#9+
adoImport.FieldByName('Модель').AsString+#9+
adoImport.FieldByName('Артикул').AsString+#9+
FixString(adoImport.FieldByName('Описание').AsString)+#9+
adoImport.FieldByName('Кол-во').AsString+#9+
//TODO: проверить
{SysUtils.StringReplace(
adoImport.FieldByName('Розн#цена').AsString), ',', '.', [rfReplaceAll]),}
adoImport.FieldByName('Розн#цена').AsString+#9+
adoImport.FieldByName('Информация').AsString+#9+
adoImport.FieldByName('Гарантия').AsString+#10;
adoImport.Next;
end;

sToFile := TStringStream.Create(sTemp, 1252);
sToFile.SaveToFile(ExtractFilePath(Application.ExeName)+'import.txt');

fmMain.MyScript.SQL.Text := 'LOAD DATA INFILE '''+
fmMain.ScreenSpecs(ExtractFilePath(Application.ExeName)+'import.txt')+''' INTO TABLE goods';
fmMain.MyScript.Execute;

ShowMessage('Новый список товаров был успешно импортирован!');
finally
sToFile.Free;
end;
end;

我知道MySQL创建什么文件,需要用Delphi创建这样的文件。在 MySQL 帮助中,这种编码称为“二进制字符集”,那么我如何通过 Delphi 以这种编码保存文件?

最佳答案

load data infile 将很好地加载您的西里尔字符。

确保您正在读取的 csv 文件使用 unicode 并正确显示字符。
确保您正在读取的数据库字段具有正确的编码。我建议使用带有西里尔字母排序规则的 UTF8。

接下来确保您的数据库连接 (!) 使用 UTF8,否则这些字符会在传输过程中发生变异。

这样做,load data infile 应该可以工作。

这是将西里尔文数据读入 MySQL 的方法:Howto import a UTF8 textbook (book) in MySQL table / A simple step by step guide through on howto import books in MySQL

关于mysql - Delphi 和二进制字符集(适用于 MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com