SQLDB erstellt mir automatisch ein Feld vom Typ ftFixedChar mit der falschen Länge? Wie kann ich SQLDB dazu überreden, die korrekte Länge automatisch von der Datenbank zu beziehen. Ich habe nicht vor, die Felddefinitionen von Hand anzulegen. Ein Wechsel auf ZEOS ist ebenfalls ausgeschlossen (kann aber gerne als Referenz für eine ggf. korrekte Ermittlung der Feldlänge angegeben werden).
Aktuell gehe ich von einem Fehler in SQLDB aus, da das Programm HeidiSQL die Abfrageergebnisse korrekt darstellt.
Eingesetzt werden:
- MariaDB Version 10.0.31-MariaDB als Server
- MariaDB Connector C, Version 2.1.0
- TMySQL55Connection von FPC trunk und Lazarus trunk
Code: Alles auswählen
CREATE TABLE `data` (
`ID` BINARY(16) NOT NULL COMMENT 'GUID',
PRIMARY KEY (`ID`)
)
COLLATE='utf8_german2_ci'
ENGINE=InnoDB
;
-- Beispieldatensatz einfügen
INSERT INTO DATA VALUES(UuidToBin(UUID()));
-- Stored procedure um die GUIDs direkt als String auszulesen.
CREATE DEFINER=`user`@`%` FUNCTION `PasUuidFromBin`(
`_bin` BINARY(16)
)
RETURNS char(38) CHARSET ascii
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Retrive Pascal style UUID from binary(16)'
BEGIN
RETURN CONCAT('{', UuidFromBin(_bin), '}');
END;
Code: Alles auswählen
SELECT PasUuidFromBin(ID) FROM DATA;
Auch ein Cast die Abfrage nach CHAR(38) wird auch nicht die korrekte Länge ermittelt.
Code: Alles auswählen
SELECT CONVERT(PasUuidFromBin(ID), CHAR(38)) FROM DATA;
Edit: ich habe den MariaDB-Connector auf Version 3.1.0 aktualisiert und bin auf TMySQL56Connection gewechselt - keine Änderung.