|
| 1 | + |
| 2 | +There are several `types` for each field (column) type, such as `type()`/`real_type()/binlog_type()` ... |
| 3 | + |
| 4 | +By default, `real_type()` and `binlog_type()` are the same as `type()`: |
| 5 | + |
| 6 | +``` |
| 7 | + // From mysql-8.0/sql/field.h Field |
| 8 | +
|
| 9 | + // ... |
| 10 | + virtual enum_field_types real_type() const { return type(); } |
| 11 | + virtual enum_field_types binlog_type() const { |
| 12 | + /* |
| 13 | + Binlog stores field->type() as type code by default. |
| 14 | + This puts MYSQL_TYPE_STRING in case of CHAR, VARCHAR, SET and ENUM, |
| 15 | + with extra data type details put into metadata. |
| 16 | +
|
| 17 | + We cannot store field->type() in case of temporal types with |
| 18 | + fractional seconds: TIME(n), DATETIME(n) and TIMESTAMP(n), |
| 19 | + because binlog records with MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME |
| 20 | + type codes do not have metadata. |
| 21 | + So for temporal data types with fractional seconds we'll store |
| 22 | + real_type() type codes instead, i.e. |
| 23 | + MYSQL_TYPE_TIME2, MYSQL_TYPE_DATETIME2, MYSQL_TYPE_TIMESTAMP2, |
| 24 | + and put precision into metatada. |
| 25 | +
|
| 26 | + Note: perhaps binlog should eventually be modified to store |
| 27 | + real_type() instead of type() for all column types. |
| 28 | + */ |
| 29 | + return type(); |
| 30 | + } |
| 31 | + // ... |
| 32 | +``` |
| 33 | + |
| 34 | +Here is a list collected from `mysql-8.0/sql/field.h`: |
| 35 | + |
| 36 | +``` |
| 37 | ++------------------------------------------------------------+-------------------------------+-----------------------+------------------------+ |
| 38 | +| Field | type() | real_type() | binlog_type() | |
| 39 | ++------------------------------------------------------------+-------------------------------+-----------------------+------------------------+ |
| 40 | +| | | | | |
| 41 | +| Field (abstract) | | | | |
| 42 | +| | | | | | |
| 43 | +| +--Field_bit | MYSQL_TYPE_BIT | | | |
| 44 | +| | +--Field_bit_as_char | | | | |
| 45 | +| | | | | | |
| 46 | +| +--Field_num (abstract) | | | | |
| 47 | +| | | +--Field_real (abstract) | | | | |
| 48 | +| | | +--Field_decimal | MYSQL_TYPE_DECIMAL | | | |
| 49 | +| | | +--Field_float | MYSQL_TYPE_FLOAT | | | |
| 50 | +| | | +--Field_double | MYSQL_TYPE_DOUBLE | | | |
| 51 | +| | | | | | | |
| 52 | +| | +--Field_new_decimal | MYSQL_TYPE_NEWDECIMAL | | | |
| 53 | +| | +--Field_short | MYSQL_TYPE_SHORT | | | |
| 54 | +| | +--Field_medium | MYSQL_TYPE_INT24 | | | |
| 55 | +| | +--Field_long | MYSQL_TYPE_LONG | | | |
| 56 | +| | +--Field_longlong | MYSQL_TYPE_LONGLONG | | | |
| 57 | +| | +--Field_tiny | MYSQL_TYPE_TINY | | | |
| 58 | +| | +--Field_year | MYSQL_TYPE_YEAR | | | |
| 59 | +| | | | | | |
| 60 | +| +--Field_str (abstract) | | | | |
| 61 | +| | +--Field_longstr | | | | |
| 62 | +| | | +--Field_string | MYSQL_TYPE_STRING | MYSQL_TYPE_STRING | | |
| 63 | +| | | +--Field_varstring | MYSQL_TYPE_VARCHAR | MYSQL_TYPE_VARCHAR | | |
| 64 | +| | | +--Field_blob | MYSQL_TYPE_BLOB | | | |
| 65 | +| | | +--Field_geom | MYSQL_TYPE_GEOMETRY | | | |
| 66 | +| | | +--Field_json | MYSQL_TYPE_JSON | | | |
| 67 | +| | | +--Field_typed_array | real_type_to_type(m_elt_type) | m_elt_type | MYSQL_TYPE_TYPED_ARRAY | |
| 68 | +| | | | | | | |
| 69 | +| | +--Field_null | MYSQL_TYPE_NULL | | | |
| 70 | +| | +--Field_enum | MYSQL_TYPE_STRING | MYSQL_TYPE_ENUM | | |
| 71 | +| | +--Field_set | | MYSQL_TYPE_SET | | |
| 72 | +| | | | | | |
| 73 | +| +--Field_temporal (abstract) | | | | |
| 74 | +| +--Field_time_common (abstract) | | | | |
| 75 | +| | +--Field_time | MYSQL_TYPE_TIME | | | |
| 76 | +| | +--Field_timef | MYSQL_TYPE_TIME | MYSQL_TYPE_TIME2 | MYSQL_TYPE_TIME2 | |
| 77 | +| | | | | | |
| 78 | +| +--Field_temporal_with_date (abstract) | | | | |
| 79 | +| +--Field_newdate | MYSQL_TYPE_DATE | MYSQL_TYPE_NEWDATE | | |
| 80 | +| +--Field_temporal_with_date_and_time (abstract) | | | | |
| 81 | +| +--Field_timestamp | MYSQL_TYPE_TIMESTAMP | | | |
| 82 | +| +--Field_datetime | MYSQL_TYPE_DATETIME | | | |
| 83 | +| +--Field_temporal_with_date_and_timef (abstract) | | | | |
| 84 | +| +--Field_timestampf | MYSQL_TYPE_TIMESTAMP | MYSQL_TYPE_TIMESTAMP2 | MYSQL_TYPE_TIMESTAMP2 | |
| 85 | +| +--Field_datetimef | MYSQL_TYPE_DATETIME | MYSQL_TYPE_DATETIME2 | MYSQL_TYPE_DATETIME2 | |
| 86 | ++------------------------------------------------------------+-------------------------------+-----------------------+------------------------+ |
| 87 | +``` |
0 commit comments