ชุดอักขระ Delphi และไบนารี (สำหรับ MySQL)

ฉันต้องการนำเข้าไฟล์ 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 นี้ได้อย่างไร


person m1know    schedule 24.06.2011    source แหล่งที่มา


คำตอบ (1)


load data infile จะโหลดตัวอักษรซีริลลิกของคุณได้ดี

ตรวจสอบให้แน่ใจว่าไฟล์ csv ที่คุณกำลังอ่านใช้ยูนิโค้ดและแสดงตัวอักษรอย่างถูกต้อง
ตรวจสอบให้แน่ใจว่าฟิลด์ฐานข้อมูลที่คุณกำลังอ่านมีการเข้ารหัสที่ถูกต้อง ฉันแนะนำ UTF8 ด้วยการเรียงอักษรซีริลลิก

ถัดไปตรวจสอบให้แน่ใจว่าการเชื่อมต่อฐานข้อมูลของคุณ (!) ใช้ UTF8 มิฉะนั้นตัวอักษรเหล่านั้นจะกลายพันธุ์ในการขนส่ง

ทำอย่างนั้นและ load data infile น่าจะได้ผล

ต่อไปนี้เป็นวิธีอ่านข้อมูล Cyrillic ใน MySQL: วิธีนำเข้าหนังสือเรียน UTF8 (หนังสือ) ในตาราง MySQL / คำแนะนำทีละขั้นตอนง่าย ๆ เกี่ยวกับวิธีใช้ นำเข้าหนังสือใน MySQL

person Johan    schedule 24.06.2011