Longtext macht Probleme

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Lion
Beiträge: 197
Registriert: Mo 24. Mär 2014, 09:58

Longtext macht Probleme

Beitrag von Lion »

Hallo Leute,
ich connecte mich mittels ODBC (ODBCConnection) auf eine MySQL Datenbank, bekomme aber mit dem Longtext Probleme, siehe Screenshot. Hat jemand eine Idee wie ich diesen Fehler beheben kann? Für die Datendarstellung verwende ich die VirtualDBGrid. Aber das ist wohl nicht das Problem, denn die chinesischen Hieroglyphen werden schon vor der Query so übergeben.


Mein Code sieht so aus:

Code: Alles auswählen

procedure TMainForm.DBConConnect();
begin
  if gvODBCConSystemDSN <> '' then
  begin
    try
      ODBCConnection1.DatabaseName := gvODBCConSystemDSN;
      ODBCConnection1.Transaction := SQLTransaction1;
      ODBCConnection1.Connected := True;

      SQLTransaction1.DataBase := ODBCConnection1;
      SQLTransaction1.Active := True;

      SQLQuery1.ReadOnly := True;
      SQLQuery1.Transaction := SQLTransaction1;
      SQLQuery1.DataBase := ODBCConnection1;
      SQLQuery1.SQL.Text := SQLSynEdit.Text; 
      SQLQuery1.Active := True;

      DataSource1.DataSet := SQLQuery1;
      DataSource1.Enabled := True;
    except
      on E: Exception do MessageDlg('Fehler beim Verbinden mit der Datenbank.'
      + sLineBreak + sLineBreak + E.ClassName + sLineBreak + E.Message, mtError, [mbOk], 0);
    end;
  end;
end; 
Dateianhänge
Screenshot-Longtext.PNG
Screenshot-Longtext.PNG (39.76 KiB) 2589 mal betrachtet

Benutzeravatar
Zvoni
Beiträge: 371
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Longtext macht Probleme

Beitrag von Zvoni »

Unabhängig von der Frage, wieso ODBC anstatt native MySQL-Client:

Welche FEHLER-Meldung erhälst du?

Oder meinst du das "chinesisch rückwärts"?
Sieht für mich nach CharSet-Thema aus.
Ich seh nirgends, dass du das CharSet setzt für die Connection
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Lion
Beiträge: 197
Registriert: Mo 24. Mär 2014, 09:58

Re: Longtext macht Probleme

Beitrag von Lion »

Zvoni hat geschrieben: Mo 5. Aug 2024, 09:36 Unabhängig von der Frage, wieso ODBC anstatt native MySQL-Client:

Welche FEHLER-Meldung erhälst du?

Oder meinst du das "chinesisch rückwärts"?
Sieht für mich nach CharSet-Thema aus.
Ich seh nirgends, dass du das CharSet setzt für die Connection
CharSet war bei mir tatsächlich auskommentiert -> //ODBCConnection1.CharSet := 'utf8mb4_bin';
Aber wenn ich das setze bringt das trotzdem nichts, auch mit unterschiedlichen Kodierungen nicht. Eine Fehlermeldung gibt es nicht, die Daten werden so wie auf dem Screenshot fehlerlos dargestellt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Longtext macht Probleme

Beitrag von af0815 »

Lion hat geschrieben: Mo 5. Aug 2024, 09:39 Eine Fehlermeldung gibt es nicht, die Daten werden so wie auf dem Screenshot fehlerlos dargestellt.
Was ist dein Problem jetzt. Mit den Aussagen bisher kann ich nicht einmal einen Fehler sehen, weil ich das geschrieben nicht deuten kann und ansonsten kein Problem sehe oder lese.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Zvoni
Beiträge: 371
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Longtext macht Probleme

Beitrag von Zvoni »

Funktioniert dein Query, z.B. in Workbench?

EDIT: https://dev.mysql.com/doc/refman/8.4/en/blob.html
hmmm.....er gibt als CharSet "...bin" (Binary)
TEXT values are treated as nonbinary strings (character strings). They have a character set other than binary,
Ich würde mal in der my.ini nachschauen, was denn der Default-CharSet ist, dann was der CharSet der Tabelle ist, und was der CharSet der Spalte ist.
Und schau mal in deiner DSN nach, ob du da (schon wieder?) ein anderes CharSet definierst

Frage: Kannst du nen Test machen mit VARCHAR-Datentyp (MaxLänge) statt LONGTEXT?
btw: Bist du dir sicher, dass du überhaupt Longtext brauchst?
Oder anderst gefragt: Was für Daten willst du in der Spalte überhaupt speichern? Tatsächlich TEXT oder doch Byte-Daten?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Lion
Beiträge: 197
Registriert: Mo 24. Mär 2014, 09:58

Re: Longtext macht Probleme

Beitrag von Lion »

af0815 hat geschrieben: Mo 5. Aug 2024, 09:57
Lion hat geschrieben: Mo 5. Aug 2024, 09:39 Eine Fehlermeldung gibt es nicht, die Daten werden so wie auf dem Screenshot fehlerlos dargestellt.
Was ist dein Problem jetzt. Mit den Aussagen bisher kann ich nicht einmal einen Fehler sehen, weil ich das geschrieben nicht deuten kann und ansonsten kein Problem sehe oder lese.
Das Problem ist, dass ich kein Chinesisch verstehe, zumal die Daten in der Datenbank auf deutsch sind, siehe Screenshot. Meine Anwendung liest die Spalte "uid" richtig aus, also die Zeichenkodierung passt, aber in der Spalte "data" passt die Kodierung nicht. DBeaver liest dagegen beide Spalten richtig aus.
Dateianhänge
Screenshot-Longtext2.png
Screenshot-Longtext2.png (47.59 KiB) 2566 mal betrachtet

Benutzeravatar
Zvoni
Beiträge: 371
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Longtext macht Probleme

Beitrag von Zvoni »

Aha. Das sieht nach JSON aus.
Frage: Bringt dir der JSON-Datentyp was (Statt Longtext)?
https://dev.mysql.com/doc/refman/8.4/en/json.html

btw: Kannst du in DBeaver nachschauen, was der als CharSet für die Verbindung nimmt?
Ist mMn definitiv ein CharSet-Problem

EDIT: Moment
https://dev.mysql.com/doc/refman/8.4/en ... mysql.html
"utf8mb4_bin" ist eine Collation, KEIN CharSet!!
Das CharSet wäre "utf8mb4"

EDIT2: Führe mal folgende SQL's aus NACHDEM die Connection erfolgreich ist (sowohl in deinem Programm als auch in DBeaver):

Code: Alles auswählen

SELECT * FROM performance_schema.session_variables
WHERE VARIABLE_NAME IN (
  'character_set_client', 'character_set_connection',
  'character_set_results', 'collation_connection'
) ORDER BY VARIABLE_NAME;
Zuletzt geändert von Zvoni am Mo 5. Aug 2024, 10:41, insgesamt 1-mal geändert.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Lion
Beiträge: 197
Registriert: Mo 24. Mär 2014, 09:58

Re: Longtext macht Probleme

Beitrag von Lion »

Beide Anwendungen geben diesen Fehler aus:

Code: Alles auswählen

SQL-Fehler [1142] [42000]: (conn=4133215) SELECT command denied to user 'dbadmin'@'localhost' for table `performance_schema`.`session_variables`
Brauche wohl mehr Rechte für die DB.

Benutzeravatar
Zvoni
Beiträge: 371
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Longtext macht Probleme

Beitrag von Zvoni »

Lion hat geschrieben: Mo 5. Aug 2024, 10:39 Beide Anwendungen geben diesen Fehler aus:

Code: Alles auswählen

SQL-Fehler [1142] [42000]: (conn=4133215) SELECT command denied to user 'dbadmin'@'localhost' for table `performance_schema`.`session_variables`
Brauche wohl mehr Rechte für die DB.
Das hier ausführen in DBeaver

Code: Alles auswählen

GRANT SELECT ON performance_schema.session_variables TO 'dbadmin'@'localhost';
Oder statt GRANT SELECT auch GRANT ALL PRIVILEGES

btw: Ich hoffe doch sehr, dass "dbadmin" auch tatsächlich DBA ist bei den Rollen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Lion
Beiträge: 197
Registriert: Mo 24. Mär 2014, 09:58

Re: Longtext macht Probleme

Beitrag von Lion »

Okay, vielen herzlichen Dank Dir!
Ich forsche mal weiter...

Benutzeravatar
Zvoni
Beiträge: 371
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Longtext macht Probleme

Beitrag von Zvoni »

Lion hat geschrieben: Mo 5. Aug 2024, 10:48 Okay, vielen herzlichen Dank Dir!
Ich forsche mal weiter...
btw: Ich glaube die GRANTS MÜSSEN von einem DBA gemacht werden.
Im Zweifelsfall benutz "root"
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten