Delphi dan kumpulan karakter biner (untuk MySQL)

Saya perlu mengimpor file xls besar ke basis MySQL. Saya mencoba menggunakan konstruksi "LOAD DATA INFILE". Data dalam xls berisi karakter cyrillic jadi saya punya beberapa masalah dengannya. Saya membuat file dump secara manual, tetapi "LOAD DATA INFILE" tidak memuat karakter cyrillic. Instruksi MySQL "SELECT ... INTO OUTFILE" berfungsi dengan sempurna, tetapi saya tidak dapat menggunakannya karena saya perlu mengimpor dari "SELECT ... INTO OUTFILE" menyimpan file dengan kumpulan karakter biner, bagaimana saya dapat melakukannya dengan Delphi 2009?

Kode saya:

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;

Saya tahu file apa yang dibuat MySQL, dan perlu membuat file tersebut dengan Delphi. Dalam bantuan MySQL pengkodean ini disebut 'kumpulan karakter biner', jadi bagaimana saya bisa menyimpan file dalam pengkodean ini dengan Delphi?


person m1know    schedule 24.06.2011    source sumber


Jawaban (1)


load data infile akan memuat karakter Sirilik Anda dengan baik.

Pastikan file csv yang Anda baca menggunakan unicode dan menampilkan karakter dengan benar.
Pastikan kolom database yang Anda baca memiliki pengkodean yang tepat. Saya menyarankan UTF8 dengan susunan Sirilik.

Selanjutnya pastikan koneksi database Anda (!) menggunakan UTF8, jika tidak, karakter tersebut akan bermutasi dalam transportasi.

Lakukan itu dan load data infile akan berfungsi.

Berikut cara membaca data Cyrillic ke MySQL: Cara mengimpor buku teks (buku) UTF8 ke tabel MySQL / Panduan langkah demi langkah sederhana tentang caranya impor buku di MySQL

person Johan    schedule 24.06.2011