Hi Adaptec,
I think your problem is coming from unit 'ZDbcMySqlUtils', after line 222:
Code: Select all
FIELD_TYPE_TINY_BLOB, FIELD_TYPE_MEDIUM_BLOB,
FIELD_TYPE_LONG_BLOB, FIELD_TYPE_BLOB:
if (FieldFlags and BINARY_FLAG) = 0 then
Result := stAsciiStream
else
Result := stBinaryStream;
The type of the field. The type value may be one of the MYSQL_TYPE_ symbols shown in the following table.
Type Value Type Description
MYSQL_TYPE_TINY TINYINT field
MYSQL_TYPE_SHORT SMALLINT field
MYSQL_TYPE_LONG INTEGER field
MYSQL_TYPE_INT24 MEDIUMINT field
MYSQL_TYPE_LONGLONG BIGINT field
MYSQL_TYPE_DECIMAL DECIMAL or NUMERIC field
MYSQL_TYPE_NEWDECIMAL Precision math DECIMAL or NUMERIC field (MySQL 5.0.3 and up)
MYSQL_TYPE_FLOAT FLOAT field
MYSQL_TYPE_DOUBLE DOUBLE or REAL field
MYSQL_TYPE_BIT BIT field (MySQL 5.0.3 and up)
MYSQL_TYPE_TIMESTAMP TIMESTAMP field
MYSQL_TYPE_DATE DATE field
MYSQL_TYPE_TIME TIME field
MYSQL_TYPE_DATETIME DATETIME field
MYSQL_TYPE_YEAR YEAR field
MYSQL_TYPE_STRING CHAR or BINARY field
MYSQL_TYPE_VAR_STRING VARCHAR or VARBINARY field
MYSQL_TYPE_BLOB BLOB or TEXT field (use max_length to determine the maximum length)
MYSQL_TYPE_SET SET field
MYSQL_TYPE_ENUM ENUM field
MYSQL_TYPE_GEOMETRY Spatial field
MYSQL_TYPE_NULL NULL-type field
... so MYSQL_TYPE_BLOB ->> can be a BLOB or TEXT
This cause the problem. It is not handled in the code.
I did some changes (unit 'ZDbcMySqlUtils', line 235) to show correct values for VARCHAR:
Code: Select all
FIELD_TYPE_VARCHAR,
FIELD_TYPE_VAR_STRING,
FIELD_TYPE_STRING:
if (PMYSQL_FIELD(FieldHandle)^.charsetnr = 63) then
Result := stString // ?? stBytes // BINARY from CHAR, VARBINARY from VARCHAR, BLOB from TEXT
else
if ( // UTF8
(PMYSQL_FIELD(FieldHandle)^.charsetnr = 33) or
(PMYSQL_FIELD(FieldHandle)^.charsetnr = 83) or
((PMYSQL_FIELD(FieldHandle)^.charsetnr>=192) and
(PMYSQL_FIELD(FieldHandle)^.charsetnr<=210)) )(* the end is not fix ??? *) then
Result := stUnicodeString
else
if ( // UCS2
(PMYSQL_FIELD(FieldHandle)^.charsetnr = 35) or
(PMYSQL_FIELD(FieldHandle)^.charsetnr = 90) or
((PMYSQL_FIELD(FieldHandle)^.charsetnr>=128) and
(PMYSQL_FIELD(FieldHandle)^.charsetnr<=146)) )(* the end is not fix ??? *) then
Result := stUnicodeString
else
Result := stString;
You should do something similar... Sorry I have nor time to fix and test it.