Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht (https://www.delphipraxis.net/202532-problem-mit-zeichen-lesen-geht-mit-utf8mb4-schreiben-nicht.html)

jaenicke 14. Nov 2019 16:23

Datenbank: MariaDB • Version: 10.3.10 • Zugriff über: FireDAC

Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Hallo an alle,

ich versuche gerade mit FireDAC in einer MariaDB dieses Zeichen zu schreiben:

Leider gibt es dann (mit nur zweimal diesem Zeichen hintereinander) diesen Fehler:
Im Projekt ... ist eine Exception der Klasse EMySQLNativeException mit der Meldung '[FireDAC][Phys][MySQL] Incorrect string value: '\xE2\x96\xB2\xE2\x96\xB2' for column 'NEW_VALUE' at row 1' aufgetreten.

Ich habe schon versucht alles, was mir an Parametern in die Finger gekommen ist (ConnectionDefs, Serverparameter wie character_set_server, Tabellen und Spaltenformate, ...) auf utf8mb4 bzw. utf8mb4_general_ci einzustellen. Damit kann ich das Zeichen zumindest lesen. Und ich kann es seitdem auch mit AsString in das Feld schreiben. Beim Schreiben in die Datenbank, sprich beim Post, kommt aber nach wie vor der genannte Fehler.

Was muss ich noch machen? Hat jemand eine Idee?

Vielen Dank schon einmal
Viele Grüße
Sebastian

hoika 15. Nov 2019 06:19

AW: Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Hallo,
wo genau hast Du denn das eingestellt?

Ich habe das gefunden (google "firedac mysql utf8mb4")
http://docwiki.embarcadero.com/Libra...ession.UTf8mb4

Allerdings habe ich auch das noch gefunden
https://medium.com/@adamhooper/in-my...4-11761243e434

jobo 15. Nov 2019 08:36

AW: Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Ich benutze mysql nicht, aber ich würde bei den Tabellen / Spalten Einstellungen anfangen (als Ansatzpunkt nach einer vielleicht nicht zutreffend/passend eingestellten DB Codierung)

https://dev.mysql.com/doc/refman/8.0...et-column.html

Damit kann man jedenfalls testen und variieren, unabhängig von dem Rest des Systems.

jaenicke 15. Nov 2019 10:43

AW: Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Liste der Anhänge anzeigen (Anzahl: 2)
Vielen Dank für die Antworten!

Zitat:

Zitat von hoika (Beitrag 1451341)
Ich habe das gefunden (google "firedac mysql utf8mb4")
http://docwiki.embarcadero.com/Libra...ession.UTf8mb4

Die Eigenschaft ist auf True gesetzt:
Anhang 51815

Zitat:

Zitat von hoika (Beitrag 1451341)
Allerdings habe ich auch das noch gefunden
https://medium.com/@adamhooper/in-my...4-11761243e434

Ich habe das alles gesetzt soweit ich sehe. Das sieht in HeidiSQL dann so aus:
Anhang 51816

Zitat:

Zitat von jobo (Beitrag 1451344)
Ich benutze mysql nicht, aber ich würde bei den Tabellen / Spalten Einstellungen anfangen (als Ansatzpunkt nach einer vielleicht nicht zutreffend/passend eingestellten DB Codierung)

Ich kann den Wert in HeidiSQL nach der Änderung auf utf8mb4 setzen. Ich kann den Wert auch mit FireDAC lesen. Ich kann ihn wirklich nur nicht schreiben.

Ich habe heute auch noch einmal probiert, aber ich sehe wirklich keinen Grund, dass es in der einen Richtung geht und in der anderen nicht.

Ach ja, vor der Umstellung auf utf8mb4 wurden direkt bei der Zuweisung in das Feld mit AsString Fragezeichen aus diesen Zeichen. Seit der Änderung passiert der Fehler erst beim Post.

jobo 15. Nov 2019 12:07

AW: Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Ausgehend von so einem Versuch würde ich mich an den Client ranrobben bis hin zur Anwendung. Das Zeichen scheint kein Problem für die DB darstzustellen.

https://rextester.com/XSKR14817

p80286 15. Nov 2019 14:12

AW: Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Zitat:

Zitat von jaenicke (Beitrag 1451352)
Ach ja, vor der Umstellung auf utf8mb4 wurden direkt bei der Zuweisung in das Feld mit AsString Fragezeichen aus diesen Zeichen. Seit der Änderung passiert der Fehler erst beim Post.

Klingt für mich so als gäbe es da eine wie auch immer geartete Intelligenz`(DB-Kompo) die wieder einmal weiß was richtig ist.
Was passert denn bei nacktem SQL

Gruß
K-H

jobo 16. Nov 2019 06:56

AW: Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Mir ist jetzt erst aufgefallen, dass es um Maria geht. (benutze ich auch nicht)
Aber es gibt bei den Charsets / Collations doch mehr Bewegung, als ich dachte und vielleicht auch Unterschiede zwischen mySQL und Maria.

Damit wäre mein "Test" und die Beiträge basierend auf mySQL vielleicht hinfällig. Das sollte dann statt dessen am besten auf der installierten Version lokal mit dem zugehörigen CLI Tool gemacht werden.
Dabei auf die "neuesten" Sets achten. Wenn Server und Client funktioniert, beim Hersteller der Komponenten nachhaken.

Aus mySQL:
utf8mb4_unicode_ci statt utf8mb4_general_ci

Maria
utf8mb4_unicode_520_ci oder neuer

Weiß nicht, was da angesagt ist. An der Ecke würde ich jedenfalls nachschauen, es gibt da immer so Verwirrung mit einem schwedischen Zeichensatz.

jaenicke 16. Nov 2019 10:05

AW: Problem mit Zeichen ▲: Lesen geht mit utf8mb4, Schreiben nicht
 
Zitat:

Zitat von p80286 (Beitrag 1451374)
Klingt für mich so als gäbe es da eine wie auch immer geartete Intelligenz`(DB-Kompo) die wieder einmal weiß was richtig ist.
Was passert denn bei nacktem SQL

Ja, mit einer update-Anweisung funktioniert es (auch mit FireDAC).

Ich habe auch schon vermutet, dass es an FireDAC liegt. Denn wie gesagt, mit HeidiSQL geht es ja mittlerweile und wenn schon das Schreiben mit AsString eine Umwandlung bewirken kann, dass da danach mit AsString stattdessen Fragezeichen herauskommen, dann muss da ja eine entsprechende Behandlung passieren.

Vielleicht sollte ich einfach mal den Typ zurück stellen und schauen wo diese "Umwandlung" passiert. Vielleicht bringt das etwas...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz