MySQL vs. Firebird - pola Varchar

0

Piszę w Lazarusie program bazodanowy łączący się przez ODBC. Mam 2 bazy z identycznymi tabelkami (tak mi się przynajmniej wydaje). Niestety, kiedy dodaję te pola do komponentu SQLQuery, to zależnie od tego, do której bazy się łączę, wczytuje inne typy pól (niestety nie są one do końca kompatybilne).

Przykładowa tabelka w bazach wygląda tak:

ID: integer
NAME: Varchar(20)
PASSWORD: Varchar(30)

Firebird:
Firebird.png

MySQL:
MySQL.png

Jeżeli łączę się do Firebirda, to wczytuje mi do SQLQuery takie pola:

object SQLQuery1: TSQLQuery
    IndexName = 'DEFAULT_ORDER'
    FieldDefs = <    
      item
        Name = 'ID'
        DataType = ftInteger
        Precision = -1
        Size = 0
      end    
      item
        Name = 'NAME'
        DataType = ftString
        Precision = -1
        Size = 20
      end    
      item
        Name = 'PASSWORD'
        DataType = ftString
        Precision = -1
        Size = 30
      end>
    Active = True
    AutoCalcFields = False
    Database = ODBCConnection2
    Transaction = SQLTransaction2
    SQL.Strings = (
      'SELECT * FROM users;'
    )
    Params = <>
    left = 224
    top = 8
    object SQLQuery1ID: TLongintField
      DisplayWidth = 10
      FieldKind = fkData
      FieldName = 'ID'
      Index = 0
      LookupCache = False
      ProviderFlags = [pfInUpdate, pfInWhere]
      ReadOnly = False
      Required = True
    end
    object SQLQuery1NAME: TStringField
      DisplayWidth = 20
      FieldKind = fkData
      FieldName = 'NAME'
      Index = 1
      LookupCache = False
      ProviderFlags = [pfInUpdate, pfInWhere]
      ReadOnly = False
      Required = True
    end
    object SQLQuery1PASSWORD: TStringField
      DisplayWidth = 30
      FieldKind = fkData
      FieldName = 'PASSWORD'
      Index = 2
      LookupCache = False
      ProviderFlags = [pfInUpdate, pfInWhere]
      ReadOnly = False
      Required = True
      Size = 30
    end
  end  

Natomiast z MySQL wczytuje mi takie pola:

object SQLQuery1: TSQLQuery
    IndexName = 'DEFAULT_ORDER'
    FieldDefs = <    
      item
        Name = 'ID'
        DataType = ftInteger
        Precision = -1
        Size = 0
      end    
      item
        Name = 'NAME'
        DataType = ftString
        Precision = -1
        Size = 20
      end    
      item
        Name = 'PASSWORD'
        DataType = ftString
        Precision = -1
        Size = 30
      end>
    Active = True
    AutoCalcFields = False
    Database = IBConnection1
    Transaction = SQLTransaction2
    SQL.Strings = (
      'SELECT * FROM users;'
    )
    Params = <>
    left = 224
    top = 8
    object SQLQuery1ID: TAutoIncField
      DisplayWidth = 10
      FieldKind = fkData
      FieldName = 'ID'
      Index = 0
      LookupCache = False
      ProviderFlags = [pfInWhere]
      ReadOnly = False
      Required = False
    end
    object SQLQuery1NAME: TWideStringField
      DisplayWidth = 20
      FieldKind = fkData
      FieldName = 'NAME'
      Index = 1
      LookupCache = False
      ProviderFlags = [pfInUpdate, pfInWhere]
      ReadOnly = False
      Required = False
      Size = 40
    end
    object SQLQuery1PASSWORD: TWideStringField
      DisplayWidth = 30
      FieldKind = fkData
      FieldName = 'PASSWORD'
      Index = 2
      LookupCache = False
      ProviderFlags = [pfInUpdate, pfInWhere]
      ReadOnly = False
      Required = False
      Size = 60
    end
  end      

Dlaczego tak się dzieje?

0

a jakie masz kodowanie w jednej a jakie w drugiej bazie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1