[wp-trac] [WordPress Trac] #41716: Check for utf8mb4 incorrectly assumes auto-truncating indexes
WordPress Trac
noreply at wordpress.org
Wed Aug 23 18:57:38 UTC 2017
#41716: Check for utf8mb4 incorrectly assumes auto-truncating indexes
--------------------------+-----------------------------
Reporter: straussd | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Database | Version: trunk
Severity: normal | Keywords:
Focuses: |
--------------------------+-----------------------------
The current test makes an incorrect assumption about MySQL/MariaDB
configuration. Specifically, it assumes that presence of utf8mb4
capabilities means that either Barracuda (the necessary InnoDB file format
to pass the test) is the default file format for all newly created tables
(or that the database silently truncates indexes).
This is not always the case for MariaDB 10.0 or 10.1 and is probably an
issue for any MySQL<5.7.7 or MariaDB<10.2 with the following
configuration:
{{{
innodb_file_per_table=true
innodb_file_format=Barracuda
innodb_large_prefix=true
}}}
Enabling {{{innodb_large_prefix}}} (which depends on the other two
options) causes the database to stop silently truncating long indexes, but
the database also won't simply switch to Barracuda for long indexes to
make creation succeed, either.
Despite "innodb_file_format" being [https://mariadb.com/kb/en/mariadb
/xtradbinnodb-server-system-variables/#innodb_file_format documented in
MariaDB] as "File format for new InnoDB tables," it only takes effect for
tables explicitly created with a Barracuda-based row format. (The
[https://dev.mysql.com/doc/refman/5.6/en/innodb-
parameters.html#sysvar_innodb_file_format MySQL documentation] is better
because it doesn't suggest that it applies to all new tables.)
I see two possible fixes:
(1) Expand the criteria for markTestSkipped to include creating a table
and verifying that it uses a [https://dev.mysql.com/doc/refman/5.7/en
/innodb-file-format.html Barracuda row format] (i.e. {{{COMPRESSED}} or
{{{DYNAMIC}}}). This will indicate that the database uses Barracuda for
all new tables.
(2) [https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format-
specification.html Explicitly specify the row format] for the table
creation test itself. This would require adding {{{ROW_FORMAT=DYNAMIC}}}
to the existing {{{CREATE TABLE}}}. This would have no effect on the
latest MySQL and MariaDB releases, which default to that anyway.
In a related issue, the test is misnamed based on the behavior it tests.
In older MySQL releases (and with no long index support enabled), the test
succeeds if the database silently truncates the long index to just a
prefix. However, in the latest releases, no truncation occurs at all. The
reason the test passes in MySQL 5.7 and MariaDB 10.2 is a new default of
long index support and Barracuda. So, at a minimum, the test should be
renamed.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/41716>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list