Row-based replication: attribute promotion and demotion.  Row-based replication supports attribute promotion and demotion between smaller data types and larger types. It is also possible to specify whether or not to permit lossy (truncated) or non-lossy conversions of demoted column values, as explained later in this section. 

Lossy and non-lossy conversions.  In the event that the target type cannot represent the value being inserted, a decision must be made on how to handle the conversion. If we permit the conversion but truncate (or otherwise modify) the source value to achieve a “fit”  in the target column, we make what is known as a lossy conversion . A conversion which does not require truncation or similar modifications to fit the source column value in the target column is a non-lossy  conversion. 

Type conversion modes.  The setting of the slave_type_conversions  global server variable controls the type conversion mode used on the replica. This variable takes a set of values from the following list, which describes the effects of each mode on the replica’s type-conversion behavior: 

ALL_LOSSY In this mode, type conversions that would mean loss of information are permitted. 

This does not imply that non-lossy conversions are permitted, merely that only cases requiring either lossy conversions or no conversion at all are permitted; for example, enabling only  this mode permits an INT column to be converted to TINYINT  (a lossy conversion), but not a TINYINT  column to an INT  column (non-lossy). Attempting the latter conversion in this case would cause replication to stop with an error on the replica. 

ALL_NON_LOSSY This mode permits conversions that do not require truncation or other special handling of the source value; that is, it permits conversions where the target type has a wider range than the source type. 

Setting this mode has no bearing on whether lossy conversions are permitted; this is controlled with the ALL_LOSSY  mode. If only ALL_NON_LOSSY  is set, but not ALL_LOSSY , then attempting a conversion that would result in the loss of data (such as INT  to TINYINT , or CHAR(25)  to VARCHAR(20) ) causes the replica to stop with an error. 

ALL_LOSSY,ALL_NON_LOSSY When this mode is set, all supported type conversions are permitted, whether or not they are lossy conversions. 

ALL_SIGNED Treat promoted integer types as signed values (the default behavior). 

ALL_UNSIGNED Treat promoted integer types as unsigned values. 

ALL_SIGNED,ALL_UNSIGNED Treat promoted integer types as signed if possible, otherwise as unsigned. 

[ empty ] When slave_type_conversions  is not set, no attribute promotion or demotion is permitted; this means that all columns in the source and target tables must be of the same types. 

This mode is the default. 

When an integer type is promoted, its signedness is not preserved. By default, the replica treats all such values as signed. You can control this behavior using ALL_SIGNED , ALL_UNSIGNED , or both. ALL_SIGNED  tells the replica to treat all promoted integer types as signed; ALL_UNSIGNED  instructs it to treat these as unsigned. Specifying both causes the replica to treat the value as signed if possible, 

