• unknown's avatar
    Bug#15581: COALESCE function truncates mutli-byte TINYTEXT values · e1c61413
    unknown authored
    field.cc:
      BLOB variations have number-in-bytes limit,
      unlike CHAR/VARCHAR which have number-of-characters limits.
      A tinyblob column can store up to 255 bytes.
      In the case of basic Latin letters (which use 1 byte per character)
      we can store up to 255 characters in a tinyblob column.
      When passing an utf8 tinyblob column as an argument into
      a function (e.g. COALESCE) we need to reserve 3*255 bytes.
      I.e. multiply length in bytes to mbcharlen for the character set.
      Although in reality a tinyblob column can never be 3*255 bytes long,
      we need to set max_length to multiply to make fix_length_and_dec()
      of the function-caller (e.g. COALESCE) calculate the correct max_length
      for the column being created.
    
    ctype_utf8.result, ctype_utf8.test:
      Adding test case.
    
    
    mysql-test/t/ctype_utf8.test:
      Adding test case.
    mysql-test/r/ctype_utf8.result:
      Adding test case.
    sql/field.cc:
      Bug#15581: COALESCE function truncates mutli-byte TINYTEXT values
      BLOB variations have byte limits,
      unlike CHAR/VARCHAR which have number-of-character limits.
      It means tinyblob can store up to 255 bytes.
      All of them can be basic latin letters which use 1 byte
      per character.
      I.e. we can store up to 255 characters in a tinyblob column.
      When passing a tinyblob column as an argument into
      a function (for example COALESCE or CONCAT) we
      need to reserve 3*255 bytes in the case of utf-8.
      I.e. multiply length in bytes to mbcharlen for the
      character set.
    e1c61413
field.cc 179 KB