Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-9319

ALTER from a bigger to a smaller blob type truncates too much data

Details

    Description

      DROP TABLE IF EXISTS t1;
      CREATE TABLE t1 (a BLOB) ENGINE=MyISAM;
      INSERT INTO t1 VALUES (REPEAT(0x61,65000));
      SELECT LENGTH(a) FROM t1;
      ALTER TABLE t1 MODIFY a TINYBLOB;
      SELECT LENGTH(a) FROM t1;

      returns 65000 before ALTER:

      +-----------+
      | LENGTH(a) |
      +-----------+
      |     65000 |
      +-----------+

      and returns 232 after ALTER:

      +-----------+
      | LENGTH(a) |
      +-----------+
      |       232 |
      +-----------+

      This looks wrong. The expected length after ALTER is 255.

      It also does not produce any warnings on truncation. Probably it should.

      Attachments

        Issue Links

          Activity

            bar Alexander Barkov created issue -
            bar Alexander Barkov made changes -
            Field Original Value New Value
            Summary ALTER for a bigger to a smaller blob type truncates too much data ALTER from a bigger to a smaller blob type truncates too much data
            bar Alexander Barkov made changes -
            Description {code}
            DROP TABLE IF EXISTS t1;
            CREATE TABLE t1 (a BLOB) ENGINE=MyISAM;
            INSERT INTO t1 VALUES (REPEAT(0x61,65000));
            SELECT LENGTH(a) FROM t1;
            ALTER TABLE t1 MODIFY a TINYBLOB;
            SELECT LENGTH(a) FROM t1;
            {code}
            returns 65000 before ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 65000 |
            +-----------+
            {code}
            and returns 232 after ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 232 |
            +-----------+
            {code}
            This looks wrong. The expected length is 255.

            {code}
            DROP TABLE IF EXISTS t1;
            CREATE TABLE t1 (a BLOB) ENGINE=MyISAM;
            INSERT INTO t1 VALUES (REPEAT(0x61,65000));
            SELECT LENGTH(a) FROM t1;
            ALTER TABLE t1 MODIFY a TINYBLOB;
            SELECT LENGTH(a) FROM t1;
            {code}
            returns 65000 before ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 65000 |
            +-----------+
            {code}
            and returns 232 after ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 232 |
            +-----------+
            {code}
            This looks wrong. The expected length after ALTER is 255.

            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            Description {code}
            DROP TABLE IF EXISTS t1;
            CREATE TABLE t1 (a BLOB) ENGINE=MyISAM;
            INSERT INTO t1 VALUES (REPEAT(0x61,65000));
            SELECT LENGTH(a) FROM t1;
            ALTER TABLE t1 MODIFY a TINYBLOB;
            SELECT LENGTH(a) FROM t1;
            {code}
            returns 65000 before ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 65000 |
            +-----------+
            {code}
            and returns 232 after ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 232 |
            +-----------+
            {code}
            This looks wrong. The expected length after ALTER is 255.

            {code}
            DROP TABLE IF EXISTS t1;
            CREATE TABLE t1 (a BLOB) ENGINE=MyISAM;
            INSERT INTO t1 VALUES (REPEAT(0x61,65000));
            SELECT LENGTH(a) FROM t1;
            ALTER TABLE t1 MODIFY a TINYBLOB;
            SELECT LENGTH(a) FROM t1;
            {code}
            returns 65000 before ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 65000 |
            +-----------+
            {code}
            and returns 232 after ALTER:
            {code}
            +-----------+
            | LENGTH(a) |
            +-----------+
            | 232 |
            +-----------+
            {code}
            This looks wrong. The expected length after ALTER is 255.

            It also does not produce any warnings on truncation. Probably it should.

            bar Alexander Barkov made changes -
            Labels upstream upstream-5.5
            bar Alexander Barkov made changes -
            Fix Version/s 5.5 [ 15800 ]
            Fix Version/s 10.2 [ 14601 ]
            serg Sergei Golubchik made changes -
            Fix Version/s 10.0 [ 16000 ]
            Fix Version/s 10.1 [ 16100 ]
            serg Sergei Golubchik made changes -
            Component/s Data Definition - Alter Table [ 10114 ]
            Component/s OTHER [ 10125 ]
            bar Alexander Barkov made changes -
            Fix Version/s 5.5.48 [ 21000 ]
            Fix Version/s 10.0.24 [ 21101 ]
            Fix Version/s 10.1.11 [ 21202 ]
            Fix Version/s 10.0 [ 16000 ]
            Fix Version/s 5.5 [ 15800 ]
            Fix Version/s 10.1 [ 16100 ]
            Resolution Fixed [ 1 ]
            Status Open [ 1 ] Closed [ 6 ]
            bar Alexander Barkov made changes -
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 73316 ] MariaDB v4 [ 149935 ]

            People

              bar Alexander Barkov
              bar Alexander Barkov
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.