[Erledigt] SQLDB und Datentyp Bit

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

[Erledigt] SQLDB und Datentyp Bit

Beitragvon Socke » 15. Feb 2018, 22:19 [Erledigt] SQLDB und Datentyp Bit

Hallo zusammen,

ich habe hier eine MariaDB-Datenbank der Version 10.0.32 mit folgender Tabelle und Inhalt:
Code: Alles auswählen
CREATE TABLE t (
  f BIT(1)
);
INSERT INTO t VALUES(0),(1);

Die SQL-Abfrage ist:
Code: Alles auswählen
SELECT f FROM t

Die Abfrage wird mit SQLDB ausgeführt. Ein Wechsel auf ZEOS ist akutell ausgeschlossen.
Das sonderbare ist: Unter Windows erhalte ich das korrekte Ergebnis (0),(1) und unter Linux ein falsches Ergebnis (0),(0).
Was ist da los?


Meine Umgebung ist:
Windows 10 64bit; Anwendung aber in 32 Bit
  • Lazarus rev. 56257
  • FPC 3.1.1 rev. 37316
  • MariaDB C-Connector 3.0.2 (kompatibel zu MySQL 5.6)

Debian 9.3, 32 Bit
  • Lazarus 1.8.0
  • FPC 3.0.4
  • libmariadb2 Version 2.3.2-2 (kompatibel zu MySQL 5.5) und libmariadbclient18 Version 10.1.26-0+deb9u1 (Kompatibel zu MySQL 5.6)
Unter Linux spielt es keine Rolle, welche Bibliothek ich verwende.

Auf beiden Plattformen habe ich Clients, die das Ergebnis korrekt anzeigen (HeidiSQL unter Windows und MySQL Workbench unter Linux).
Interessant ist, dass ich mit dem Kommandozeilen-Tool mysql die Abfrage ändern muss, damit Klartext ausgegeben wird:
Code: Alles auswählen
SELECT cast(f AS int) FROM t

Andernfalls wird offenbar das Bitfeld einfach als Zeichen ausgegeben, wodurch die Schriftart ein Ersatzzeichen für die Binär-1 und 0 gar nicht anzeigt. Unter Windows habe ich leider keinen Kommandozeilen-mysql.

Wenn ich In Lazarus ein die entsprechenden Komponenten platziere und die Felddefinitionen der SQL-Query automatisch erstelle, werden auf beiden Systemen die Eigenschaften identisch gesetzt (DataType=ftLargeint, Precision=-1). Übernehme ich den CAST(f as INT) in die Query in Lazarus ändert das unter Linux gar nichts; Windows verhält sich dann wie Linux.

Edit:
Obwohl das Verhalten höchst seltsam ist, habe ich eine Lösung gefunden. Der offizielle Datentyp für boolsche Werte in MariaDB ist TINYINT(1). Damit funktioniert meine Anwendung ungeändert unter Windows wie Linux. Falls dennoch jemand weitere Erkenntnisse hat, würde ich diese trotzdem gerne kennen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2482
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 2 Gäste

porpoises-institution
accuracy-worried