Tabella comparativa dei tipi di dati

Mi capita spesso di aver bisogno di usare conversioni tra tipi di dati di ambienti diversi: ormai non ho problemi a farlo tra Sql Server e .NET, ma ogni tanto mi occorre farlo tra .NET e le API Win32 e già la cosa si complica.

Recentemente poi con l’avvento delle AI e la necessità di imparare Python (sono ancora ai primi passi, non credo di scriverne a breve) questa esigenza è aumentata.

Inizialmente pensavo di pubblicare una tabella ma già alla prima bozza dell’articolo mi sono reso conto che sarebbe stata poco leggibile. Ho deciso perciò che l’articolo avrebbe avuto una struttura più classica: un paragrafo per ogni tipo di dato .NET (ordinati in ordine alfabetico) con l’elenco dei tipi negli altri ambienti.

Boolean

Dimensione: 8 bit (1 byte)
Range: True o False

Visual Basic: Boolean
C#: bool
Java: boolean
Python: bool
Win32 API: BOOL
SQL Server: BIT
MySQL: BOOLEAN / TINYINT(1)
PostgreSQL: BOOLEAN
Oracle: NUMBER(1)


Byte

Dimensione: 8 bit
Range: 0 a 255

Visual Basic: Byte
C#: byte
Java: byte (signed: -128 a 127)
Python: int (0-255)
Win32 API: BYTE
SQL Server: TINYINT
MySQL: TINYINT UNSIGNED
PostgreSQL: SMALLINT
Oracle: NUMBER(3)


Char

Dimensione: 16 bit
Range: U+0000 a U+FFFF (carattere Unicode)

Visual Basic: Char
C#: char
Java: char
Python: str (singolo carattere)
Win32 API: WCHAR / TCHAR
SQL Server: NCHAR(1)
MySQL: CHAR(1)
PostgreSQL: CHAR(1)
Oracle: CHAR(1)


DateTime

Dimensione: 64 bit
Range: 01/01/0001 00:00:00 a 31/12/9999 23:59:59

Visual Basic: Date / DateTime
C#: DateTime
Java: java.time.LocalDateTime / java.util.Date
Python: datetime.datetime
Win32 API: SYSTEMTIME / FILETIME
SQL Server: DATETIME / DATETIME2
MySQL: DATETIME
PostgreSQL: TIMESTAMP
Oracle: DATE / TIMESTAMP


Decimal

Dimensione: 128 bit
Range: ±1.0 × 10^-28 a ±7.9228 × 10^28 (29 cifre significative)

Visual Basic: Decimal
C#: decimal
Java: java.math.BigDecimal
Python: decimal.Decimal
Win32 API: – (non supportato nativamente)
SQL Server: DECIMAL / NUMERIC
MySQL: DECIMAL / NUMERIC
PostgreSQL: DECIMAL / NUMERIC
Oracle: NUMBER


Double

Dimensione: 64 bit
Range: ±5.0 × 10^-324 a ±1.7 × 10^308

Visual Basic: Double
C#: double
Java: double
Python: float
Win32 API: double
SQL Server: FLOAT(53)
MySQL: DOUBLE
PostgreSQL: DOUBLE PRECISION
Oracle: BINARY_DOUBLE


Int16

Dimensione: 16 bit
Range: -32,768 a 32,767

Visual Basic: Short
C#: short
Java: short
Python: int
Win32 API: SHORT / WORD
SQL Server: SMALLINT
MySQL: SMALLINT
PostgreSQL: SMALLINT
Oracle: NUMBER(5)


Int32

Dimensione: 32 bit
Range: -2,147,483,648 a 2,147,483,647

Visual Basic: Integer
C#: int
Java: int
Python: int
Win32 API: INT / LONG / DWORD
SQL Server: INT
MySQL: INT
PostgreSQL: INTEGER
Oracle: NUMBER(10)


Int64

Dimensione: 64 bit
Range: -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

Visual Basic: Long
C#: long
Java: long
Python: int
Win32 API: LONGLONG / INT64
SQL Server: BIGINT
MySQL: BIGINT
PostgreSQL: BIGINT
Oracle: NUMBER(19)


Object

Dimensione: Variabile (riferimento: 32/64 bit)
Range: Qualsiasi tipo di dato

Visual Basic: Object
C#: object
Java: java.lang.Object
Python: object
Win32 API: LPVOID / PVOID
SQL Server: SQL_VARIANT
MySQL: JSON
PostgreSQL: JSON / JSONB
Oracle: BLOB / CLOB


SByte

Dimensione: 8 bit
Range: -128 a 127

Visual Basic: SByte
C#: sbyte
Java: byte
Python: int (-128 to 127)
Win32 API: CHAR
SQL Server: TINYINT
MySQL: TINYINT
PostgreSQL: SMALLINT
Oracle: NUMBER(3)


Single

Dimensione: 32 bit
Range: ±1.5 × 10^-45 a ±3.4 × 10^38

Visual Basic: Single
C#: float
Java: float
Python: float
Win32 API: float
SQL Server: REAL / FLOAT(24)
MySQL: FLOAT
PostgreSQL: REAL
Oracle: BINARY_FLOAT


String

Dimensione: Variabile
Range: 0 a circa 2 miliardi di caratteri Unicode

Visual Basic: String
C#: string
Java: java.lang.String
Python: str
Win32 API: LPSTR / LPWSTR / LPTSTR
SQL Server: NVARCHAR / VARCHAR
MySQL: VARCHAR / TEXT
PostgreSQL: VARCHAR / TEXT
Oracle: VARCHAR2 / CLOB


UInt16

Dimensione: 16 bit
Range: 0 a 65,535

Visual Basic: UShort
C#: ushort
Java: char (come unsigned)
Python: int (0-65535)
Win32 API: USHORT / WORD
SQL Server: INT
MySQL: SMALLINT UNSIGNED
PostgreSQL: INTEGER
Oracle: NUMBER(5)


UInt32

Dimensione: 32 bit
Range: 0 a 4,294,967,295

Visual Basic: UInteger
C#: uint
Java: int (uso con maschere)
Python: int
Win32 API: UINT / DWORD / ULONG
SQL Server: BIGINT
MySQL: INT UNSIGNED
PostgreSQL: BIGINT
Oracle: NUMBER(10)


UInt64

Dimensione: 64 bit
Range: 0 a 18,446,744,073,709,551,615

Visual Basic: ULong
C#: ulong
Java: long (uso con maschere)
Python: int
Win32 API: ULONGLONG / UINT64
SQL Server: DECIMAL(20,0)
MySQL: BIGINT UNSIGNED
PostgreSQL: NUMERIC(20,0)
Oracle: NUMBER(20)


Note Importanti

Differenze tra Piattaforme

  • Java non supporta nativamente tipi unsigned (eccetto char)
  • Python usa int con precisione arbitraria per tutti gli interi
  • Win32 API varia in base alla modalità Unicode/ANSI
  • SQL Server distingue tra VARCHAR (ASCII) e NVARCHAR (Unicode)
  • Oracle utilizza NUMBER come tipo numerico universale

    Comunque visto che la tabella può tornare comoda per una conversione veloce tra tipi, la metto a disposizione qui (NB: i valori sono separati da “;”):

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

    *