AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus
Thema durchsuchen
Ansicht
Themen-Optionen

ZEOS ZQuery liest Spalte mit Collation utf8_bin nicht richtig aus

Ein Thema von Codehunter · begonnen am 17. Mär 2018 · letzter Beitrag vom 22. Mär 2018
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 18. Mär 2018, 14:46
Haaaabs rausgefunden

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`;
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

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

  Alt 18. Mär 2018, 16:43
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)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 18. Mär 2018, 18:02
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
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 Ich bin da an einem Projekt dran, da könnte mir die 7.3 sehr gelegen kommen. Gibt es da schon einen Zeithorizont?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (18. Mär 2018 um 18:07 Uhr)
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

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

  Alt 21. Mär 2018, 05:26
Hi Cody,

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...
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 21. Mär 2018, 07:27
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?
Ja. Das bezieht sich wieder auf die Tabelle mysql.user, worin es diverse _priv-Felder als ENUM('Y','N') gibt, die aber in meinem Fall (MariaDB 10) immer als AsString="Wahr" geliefert werden. Sowas kannte ich auch früher von UniDAC, wo der Boolean-Cast per Default nur bei ENUM('0','1') und nicht bei Unicode-Feldern funktionierte und alle anderen ENUMs immer "Wahr" (weil Inhalt <> "0") lieferten, bis man alternative Boolean-ENUMs konfiguriert hat. Irgendwann hat man das seitens Devart geändert und Y/N auch per Default als Boolean integriert. Ich habe mir aber angewöhnt, den Boolean-Cast generell abzuschalten und mit if AsString = 'Y' zu prüfen, weil es mehrmals nach einem Update des DBMS vorkam, dass das Casting nicht richtig funktionierte. Oder ich bin gleich ganz auf TINYINT(1) ausgewichen und habe auf if AsInteger > 0 geprüft.

Wie gesagt, für mich ist ZEOS neu. Kann man denn da auch die Boolean-ENUMs konfigurieren/abschalten oder ist das Y/N hartcodiert?

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...
Das hier war ja nicht als Kritik an ZEOS gemeint. Ich habs halt so verwendet wie ich es von UniDAC gewohnt bin und es gab dabei Probleme. Konntest du eigentlich das Problem aus #7 nachstellen? Da kommen ja im Grunde zwei Sachen zusammen. Einerseits dass bei Gleichnamigkeit von Spalte und Tabelle die Zuordnung nicht klappt und andererseits das ohne serverseitiges Typecast ein utf8_bin mit AsString nicht richtig ausgelesen werden kann.

Davon abgesehen, ich kenne das genauso: Das höchste Lob das man als EDV'ler/Entwickler/Open-Source-Maintainer bekommen kann ist, nicht kritisiert zu werden. Insofern: ZEOS ist eine tolle Sache. Ich hätts mir vllt. eher mal anschauen sollen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
558 Beiträge
 
Delphi 10.3 Rio
 
#6

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

  Alt 21. Mär 2018, 08:24
Ein Enum ist ein Aufzählung und nicht Boolean. Das hat sich seit 2014 nicht geändert (tinyint(1)). Der Bit Datentyp kommt noch hin.

Den Booleantyp muss die Datenbank können und die Interpretation von Devart ist verständlich, aber auch Devart hat das nicht ganz so freiwillig eingebaut (Interbase, Firebird haben ähnliche Ansinnen). Möglw. war es FIBPlus die damit begonnen haben oder IBOBjects im Umfeld von Interbase.

Die Enumumeration geht weiter. Es gibt mal die konkrete Ausprägung in Form eines Wertbereichs der fix festgelegt ist (enum in der Programmiersprache). Dabei handelt es sich um einen Spezialfall. In der gelebten Praxis ist eine Enumeration dynamisch erweiterbar und auf der Ebene im Programm gehaltene Metadaten angesiedelt.

Mal abseits der vielen Lösungen die eher im Umfeld der Anzeige rumkugeln eine mit einer Database Table für Firebird aus dem ZEOS Forum für Firefird.

Wahr oder Falsch sind was anders gelagert als die C Interpretation. Es gibt allein ein mathematischen Beweis, dass beide Varianten auf das selbe rauslaufen und damit Deckungsgleich sind. In C ist nur 'false' mit 0 definiert und not false ist true.

(section 7.16 / C99). Es gibt dann in der stdbool.h mal eine Definition über 0 und 1.



[QUOTE=Codehunter;1396845]
Was ist damit? Zeos + MySQL mappt den enum('Y','N') zu ftBoolean.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 21. Mär 2018, 11:49
Ein Enum ist ein Aufzählung und nicht Boolean. Das hat sich seit 2014 nicht geändert (tinyint(1)). Der Bit Datentyp kommt noch hin.
Und wie spricht man den in Delphi an? Mit AsInteger soweit ich weiß ^^ Da kann ich auch gleich TINYINT nehmen, habe fast alle Vorteile von ENUM (außer der Bereichsgrenzen) abzüglich aller Nachteile von ENUM

Den Booleantyp muss die Datenbank können und die Interpretation von Devart ist verständlich, aber auch Devart hat das nicht ganz so freiwillig eingebaut (Interbase, Firebird haben ähnliche Ansinnen). Möglw. war es FIBPlus die damit begonnen haben oder IBOBjects im Umfeld von Interbase.
völlig richtig! IMHO fehlt Data.DB.TFieldType ein Datentyp für ENUM, quasi ein undefinierter Zustand. Das kann man dann weder ZEOS noch Devart wirklich vorwerfen dass sie gezwungen sind, irgendwelche Quasi-Standards zu übernehmen.

Wahr oder Falsch sind was anders gelagert als die C Interpretation. Es gibt allein ein mathematischen Beweis, dass beide Varianten auf das selbe rauslaufen und damit Deckungsgleich sind. In C ist nur 'false' mit 0 definiert und not false ist true.
Womit es eigentlich richtig wäre, wenn wie bei mir geschehen AsString immer zu "Wahr" auflöst, selbst wenn das Feld als ENUM('N','Y') definiert und mit "N" belegt ist. Devart hat eben genau das später konfigurierbar gemacht, weil die Kaffeesatzleserei in Quasistandards zu nichts führte
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz