Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus (https://www.delphipraxis.net/195688-zeos-zquery-liest-spalte-mit-collation-utf8_bin-nicht-richtig-aus.html)

Codehunter 17. Mär 2018 21:48

Datenbank: MariaDB • Version: 10 • Zugriff über: ZEOS

ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Hallo!

Wenn ich mittels ZEOS den Query
Code:
SELECT * FROM `mysql`.`user`;
an eine MariaDB absetze, bekomme ich im Ergebnis nur "Datengrütz" für die Spalten "User" und "Host". Wenn ich mit HeidiSQL schaue, dann definiert MariaDB diese beiden Spalten mit der Collation "utf8_bin". Ich vermute, dass bei ZEOS die interne Konvertierung nicht klappt, wenn ich versuche mit FieldByName().AsString darauf zuzugreifen. Wie lese ich solche Spalten richtig aus? Im Netz finde ich dazu nicht wirklich was außer dem Hinweis, man möge doch "einfach" die Collation der Spalten ändern auf "utf8_general_ci". Was natürlich seeeeehr hilfreich ist bei DBMS-internen Tabellen :evil:

Grüße
Cody

EgonHugeist 18. Mär 2018 08:55

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Hallo Cody!

nein Zeos hat keine Encodierungs-Probleme mehr. Schaust du dir die Felder und deren Typen an, erkennt man, daß ftBytes als TField.DataType festgestellt wurde. Das ist natürlich nicht richtig. Es scheint dir aber auch nicht aufgefallen zu sein.
TField.AsString macht dann erst das/den/die(was ist richtig?)
Zitat:

Zitat von Codehunter
"Datengrütz"

Zitat:

Zitat von Codehunter (Beitrag 1396495)
Wie lese ich solche Spalten richtig aus?

Das ist die einzige Frage,die ich hier entnehmen kann. Irgendwelche simple Improvisationen möchte ich hier nicht anführen, das sollte Zeos für dich schon auflösen können.

Patch done R4383 /testing-7.2 (SVN)

p.s. dafür gibt es das Ticket-System: https://sourceforge.net/p/zeoslib/tickets/

Codehunter 18. Mär 2018 12:13

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Hallo Egon,

ich bitte die ein oder andere Formulierung mir nachzusehen. Zu meiner Entschuldigung verweise ich auf die Uhrzeit des Post und die 15 Stunden Coden davor :pale:

Zitat:

Zitat von EgonHugeist (Beitrag 1396507)
nein Zeos hat keine Encodierungs-Probleme mehr. Schaust du dir die Felder und deren Typen an, erkennt man, daß ftBytes als TField.DataType festgestellt wurde. Das ist natürlich nicht richtig. Es scheint dir aber auch nicht aufgefallen zu sein.
TField.AsString macht dann erst das/den/die(was ist richtig?)
Zitat:

Zitat von Codehunter
"Datengrütz"


ZEOS ist relativ neu für mich, ich war bzw. bin hauptsächlich mit UniDAC unterwegs. Das kommt aber beim betreffenden Projekt nicht in Frage. Daher der Versuch mit ZEOS. Die besagte Tabelle ist ja bei allen 10er MariaDB so vorhanden und IMHO auch bei neueren MySQL. Daher sollte das Problem einfach nachstellbar sein. Mit HeidiSQL sehe ich "root" und andere Benutzernamen in der Spalte
Code:
mysql.user.User
aber wenn ich mit ZEOS auslese, erhalte ich chinesisch aussehende Zeichenketten und Nuller:
Delphi-Quellcode:
'潲瑯#0#0#0#0#0#0#0#0#0#0#0'


Grüße
Cody

PS: Ich bin mit der zeosdbo-7.2.3-rc unterwegs.

Ghostwalker 18. Mär 2018 13:41

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Schon mal Probiert wenn der Zielstring-Variable ein Ansistring ist ?

Codehunter 18. Mär 2018 13:51

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Zitat:

Zitat von Ghostwalker (Beitrag 1396534)
Schon mal Probiert wenn der Zielstring-Variable ein Ansistring ist ?

Ja das war sogar mein erster Gedanke. Der Unterschied ist dabei lediglich, dass anstelle der chinesischen Zeichen dann "?" auftauchen, wieder gefolgt von vielen Nullern.

Codehunter 18. Mär 2018 14:30

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Da gibt es auch noch andere Probleme. Bei folgendem Query erhalte ich in HeidiSQL eine Liste der Benutzernamen:
Code:
SELECT CONVERT(CAST(User as BINARY) USING utf8) FROM `mysql`.`user`;
in ZEOS dagegen erhalte ich den Fehler "Das Feld User wurde nicht gefunden."

Codehunter 18. Mär 2018 14:46

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Haaaabs rausgefunden :cyclops:

Das Problem scheint darin begründet zu sein, dass die Spalte genauso heißt wie die Tabelle (mysql.user.User). Gibt man das explizit an, klappt es nicht nur mit dem Cast sondern auch mit dem Auslesen als String im Delphi:
Code:
SELECT `user`.`User` COLLATE UTF8_GENERAL_CI AS `User` FROM `mysql`.`user`;

EgonHugeist 18. Mär 2018 16:43

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Wir können nicht täglich einen RC erstellen nur weil ein Käfer weniger durch die Relais wandert.

Wie gesagt der Fix ist im SVN erhältlich und nicht in der 7.2.3-rc.

Ich denke in ca. 2-3 Wochen machen wir den Deckel mit 7.2 zu und lösen meine Uralt 7.1.4 ab. 7.3 ist ja auch schon vor mehr als 3 Jahren unter meiner Fuchtel entstanden(Native OleDB access da die ADO Zwichenschicht total lahm ist und Native ODBC + weitere Features)

Codehunter 18. Mär 2018 18:02

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Zitat:

Zitat von EgonHugeist (Beitrag 1396542)
Wie gesagt der Fix ist im SVN erhältlich und nicht in der 7.2.3-rc.

So genau ging das eigentlich gar nicht hervor. Wie gesagt ich bin kein ZEOS-Urgestein. Daher hab ich das nicht gleich realisiert dass der Fix NACH der 7.2.3-rc kam. Es sind mir noch ein paar andere Nicklichkeiten aufgefallen (z.B. ENUMs werden zu Boolean gecastet und dann von .AsString immer als "Wahr" ausgelesen statt als CHAR). Da warte ich jetzt einfach mal die Final ab. Gibt noch genug andere Baustellen die ich bis dahin beackern kann ;-)
Zitat:

Zitat von EgonHugeist (Beitrag 1396542)
7.3 ist ja auch schon vor mehr als 3 Jahren unter meiner Fuchtel entstanden(Native OleDB access da die ADO Zwichenschicht total lahm ist und Native ODBC + weitere Features)

Das klingt sehr interessant. Ich erinnere mich da mit Grausen an die Kombination AnySQL Maestro + Sybase DB über ADO. Allein das Öffnen eines Wawi-Schema führte zu 12 Minuten Eieruhring :evil: Ich bin da an einem Projekt dran, da könnte mir die 7.3 sehr gelegen kommen. Gibt es da schon einen Zeithorizont?

EgonHugeist 21. Mär 2018 05:26

AW: ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
 
Hi Cody,

Zitat:

Zitat von CodeHunter
kam. Es sind mir noch ein paar andere Nicklichkeiten aufgefallen (z.B. ENUMs werden zu Boolean gecastet und dann von .AsString immer als "Wahr" ausgelesen statt als CHAR)

Was ist damit? Zeos + MySQL mappt den enum('Y','N') zu ftBoolean. Das ist schon immer so, da MySQL keinen Boolean-Typen hat. Hast du andere Probleme mit dem Enums?
7.2-stable wird Jan dieses WE machen wollen: http://zeoslib.sourceforge.net/viewt...p?f=40&t=71794

Wegen der 7.3 + Zeithorizont. Nicht wirklich, schön wäre noch diesen Sommer. Soll heißen es wäre schön daß mal so einige damit loslegen, damit mehr Tests/Reports der Benutzer bekommen. Hinterher kritisieren kann jeder...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.
Seite 1 von 2  1 2      

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