Skip to content

Latest commit

 

History

History
88 lines (80 loc) · 8.38 KB

field_type.md

File metadata and controls

88 lines (80 loc) · 8.38 KB

There are several types for each field (column) type, such as type()/real_type()/binlog_type() ...

By default, real_type() and binlog_type() are the same as type():

  // From mysql-8.0/sql/field.h Field

  // ...
  virtual enum_field_types real_type() const { return type(); }
  virtual enum_field_types binlog_type() const {
    /*
      Binlog stores field->type() as type code by default.
      This puts MYSQL_TYPE_STRING in case of CHAR, VARCHAR, SET and ENUM,
      with extra data type details put into metadata.

      We cannot store field->type() in case of temporal types with
      fractional seconds: TIME(n), DATETIME(n) and TIMESTAMP(n),
      because binlog records with MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME
      type codes do not have metadata.
      So for temporal data types with fractional seconds we'll store
      real_type() type codes instead, i.e.
      MYSQL_TYPE_TIME2, MYSQL_TYPE_DATETIME2, MYSQL_TYPE_TIMESTAMP2,
      and put precision into metatada.

      Note: perhaps binlog should eventually be modified to store
      real_type() instead of type() for all column types.
    */
    return type();
  }
  // ...

Here is a list collected from mysql-8.0/sql/field.h:

+------------------------------------------------------------+-------------------------------+-----------------------+------------------------+
|                           Field                            |            type()             |      real_type()      |      binlog_type()     |
+------------------------------------------------------------+-------------------------------+-----------------------+------------------------+
|                                                            |                               |                       |                        |
| Field (abstract)                                           |                               |                       |                        |
| |                                                          |                               |                       |                        |
| +--Field_bit                                               | MYSQL_TYPE_BIT                |                       |                        |
| |  +--Field_bit_as_char                                    |                               |                       |                        |
| |                                                          |                               |                       |                        |
| +--Field_num (abstract)                                    |                               |                       |                        |
| |  |  +--Field_real (abstract)                             |                               |                       |                        |
| |  |     +--Field_decimal                                  | MYSQL_TYPE_DECIMAL            |                       |                        |
| |  |     +--Field_float                                    | MYSQL_TYPE_FLOAT              |                       |                        |
| |  |     +--Field_double                                   | MYSQL_TYPE_DOUBLE             |                       |                        |
| |  |                                                       |                               |                       |                        |
| |  +--Field_new_decimal                                    | MYSQL_TYPE_NEWDECIMAL         |                       |                        |
| |  +--Field_short                                          | MYSQL_TYPE_SHORT              |                       |                        |
| |  +--Field_medium                                         | MYSQL_TYPE_INT24              |                       |                        |
| |  +--Field_long                                           | MYSQL_TYPE_LONG               |                       |                        |
| |  +--Field_longlong                                       | MYSQL_TYPE_LONGLONG           |                       |                        |
| |  +--Field_tiny                                           | MYSQL_TYPE_TINY               |                       |                        |
| |     +--Field_year                                        | MYSQL_TYPE_YEAR               |                       |                        |
| |                                                          |                               |                       |                        |
| +--Field_str (abstract)                                    |                               |                       |                        |
| |  +--Field_longstr                                        |                               |                       |                        |
| |  |  +--Field_string                                      | MYSQL_TYPE_STRING             | MYSQL_TYPE_STRING     |                        |
| |  |  +--Field_varstring                                   | MYSQL_TYPE_VARCHAR            | MYSQL_TYPE_VARCHAR    |                        |
| |  |  +--Field_blob                                        | MYSQL_TYPE_BLOB               |                       |                        |
| |  |     +--Field_geom                                     | MYSQL_TYPE_GEOMETRY           |                       |                        |
| |  |     +--Field_vector                                   | MYSQL_TYPE_VECTOR             |                       |                        |
| |  |     +--Field_json                                     | MYSQL_TYPE_JSON               |                       |                        |
| |  |        +--Field_typed_array                           | real_type_to_type(m_elt_type) | m_elt_type            | MYSQL_TYPE_TYPED_ARRAY |
| |  |                                                       |                               |                       |                        |
| |  +--Field_null                                           | MYSQL_TYPE_NULL               |                       |                        |
| |  +--Field_enum                                           | MYSQL_TYPE_STRING             | MYSQL_TYPE_ENUM       |                        |
| |     +--Field_set                                         |                               | MYSQL_TYPE_SET        |                        |
| |                                                          |                               |                       |                        |
| +--Field_temporal (abstract)                               |                               |                       |                        |
|    +--Field_time_common (abstract)                         |                               |                       |                        |
|    |  +--Field_time                                        | MYSQL_TYPE_TIME               |                       |                        |
|    |  +--Field_timef                                       | MYSQL_TYPE_TIME               | MYSQL_TYPE_TIME2      | MYSQL_TYPE_TIME2       |
|    |                                                       |                               |                       |                        |
|    +--Field_temporal_with_date (abstract)                  |                               |                       |                        |
|       +--Field_newdate                                     | MYSQL_TYPE_DATE               | MYSQL_TYPE_NEWDATE    |                        |
|       +--Field_temporal_with_date_and_time (abstract)      |                               |                       |                        |
|          +--Field_timestamp                                | MYSQL_TYPE_TIMESTAMP          |                       |                        |
|          +--Field_datetime                                 | MYSQL_TYPE_DATETIME           |                       |                        |
|          +--Field_temporal_with_date_and_timef (abstract)  |                               |                       |                        |
|             +--Field_timestampf                            | MYSQL_TYPE_TIMESTAMP          | MYSQL_TYPE_TIMESTAMP2 | MYSQL_TYPE_TIMESTAMP2  |
|             +--Field_datetimef                             | MYSQL_TYPE_DATETIME           | MYSQL_TYPE_DATETIME2  | MYSQL_TYPE_DATETIME2   |
+------------------------------------------------------------+-------------------------------+-----------------------+------------------------+