Ya no necesitas investigar más en otras webs porque estás al espacio necesario, tenemos la solución que buscas pero sin complicaciones.
El modo estricto de InnoDB es similar al modo estricto de SQL. Cuando está habilitado, ciertas advertencias de InnoDB se convierten en errores.
Configuración del modo estricto InnoDB
MariaDB comenzando con 10.2.2
En MariaDB 10.2.2 y posteriormente, el modo estricto InnoDB está habilitado de forma predeterminada.
El modo estricto InnoDB se puede habilitar o deshabilitar configurando el innodb_strict_mode
variable de sistema del servidor.
Su valor global se puede cambiar dinámicamente con SET GLOBAL
. Por ejemplo:
SETGLOBAL innodb_strict_mode=ON;
Su valor para la sesión actual también se puede cambiar dinámicamente con SET SESSION
. Por ejemplo:
SETSESSION innodb_strict_mode=ON;
También se puede configurar en un grupo de opciones del servidor en un archivo de opciones antes de iniciar el servidor. Por ejemplo:
[mariadb]... innodb_strict_mode=ON
Errores de modo estricto de InnoDB
Opciones de creación incorrectas
Si el modo estricto InnoDB está habilitado, y si se ejecuta una declaración DDL y se especifican opciones de tabla no válidas o conflictivas, se genera un error. El error solo será un error genérico que diga lo siguiente:
ERROR 1005(HY000): Can't createtable`db1`.`tab`(errno: 140"Wrong create options")
Sin embargo, se pueden encontrar más detalles sobre el error ejecutando SHOW WARNINGS
.
Por ejemplo, el error se genera en los siguientes casos:
- los
KEY_BLOCK_SIZE
La opción de tabla se establece en un valor distinto de cero, pero laROW_FORMAT
La opción de tabla se establece en algún formato de fila que no sea elCOMPRESSED
formato de fila. Por ejemplo:
SETSESSION innodb_strict_mode=ON;CREATEORREPLACETABLE tab ( id intPRIMARYKEY, str varchar(50)) KEY_BLOCK_SIZE=4 ROW_FORMAT=DYNAMIC; ERROR 1005(HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE. | | Error | 1005 | Can't createtable`db1`.`tab`(errno: 140"Wrong create options")|| Warning |1030| Got error 140"Wrong create options"from storage engineInnoDB|+---------+------+--------------------------------------------------------------------+3rowsinset(0.000 sec)
- los
KEY_BLOCK_SIZE
La opción de tabla se establece en un valor distinto de cero, pero el valor configurado es mayor que16
o el valor de lainnodb_page_size
variable de sistema, la que sea menor.
SETSESSION innodb_strict_mode=ON;CREATEORREPLACETABLE tab ( id intPRIMARYKEY, str varchar(50)) KEY_BLOCK_SIZE=16; ERROR 1005(HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: KEY_BLOCK_SIZE=16 cannot be larger than 8. | | Error | 1005 | Can't createtable`db1`.`tab`(errno: 140"Wrong create options")|| Warning |1030| Got error 140"Wrong create options"from storage engineInnoDB|+---------+------+--------------------------------------------------------------------+3rowsinset(0.000 sec)
- los
KEY_BLOCK_SIZE
La opción de tabla se establece en un valor distinto de cero, pero lainnodb_file_per_table
la variable del sistema no está establecida enON
.
SETGLOBAL innodb_file_per_table=OFF;SETSESSION innodb_strict_mode=ON;CREATEORREPLACETABLE tab ( id intPRIMARYKEY, str varchar(50)) KEY_BLOCK_SIZE=4; ERROR 1005(HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table. | | Error | 1005 | Can't createtable`db1`.`tab`(errno: 140"Wrong create options")|| Warning |1030| Got error 140"Wrong create options"from storage engineInnoDB|+---------+------+--------------------------------------------------------------------+3rowsinset(0.000 sec)
- los
KEY_BLOCK_SIZE
La opción de tabla se establece en un valor distinto de cero, pero no se establece en uno de los valores admitidos: [1, 2, 4, 8, 16].
SETSESSION innodb_strict_mode=ON;CREATEORREPLACETABLE tab ( id intPRIMARYKEY, str varchar(50)) KEY_BLOCK_SIZE=5; ERROR 1005(HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+-----------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------------------------+ | Warning | 1478 | InnoDB: invalid KEY_BLOCK_SIZE = 5. Valid values are [1, 2, 4, 8, 16] | | Error | 1005 | Can't createtable`db1`.`tab`(errno: 140"Wrong create options")|| Warning |1030| Got error 140"Wrong create options"from storage engineInnoDB|+---------+------+-----------------------------------------------------------------------+3rowsinset(0.000 sec)
- los
ROW_FORMAT
La opción de tabla se establece en laCOMPRESSED
formato de fila, pero elinnodb_file_per_table
la variable del sistema no está establecida enON
.
SETGLOBAL innodb_file_per_table=OFF;SETSESSION innodb_strict_mode=ON;CREATEORREPLACETABLE tab ( id intPRIMARYKEY, str varchar(50)) ROW_FORMAT=COMPRESSED; ERROR 1005(HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table. | | Error | 1005 | Can't createtable`db1`.`tab`(errno: 140"Wrong create options")|| Warning |1030| Got error 140"Wrong create options"from storage engineInnoDB|+---------+------+--------------------------------------------------------------------+3rowsinset(0.000 sec)
- los
ROW_FORMAT
La opción de tabla se establece en un valor, pero no se establece en uno de los valores admitidos por InnoDB:REDUNDANT
,COMPACT
,DYNAMIC
, yCOMPRESSED
.
SETSESSION innodb_strict_mode=ON;CREATEORREPLACETABLE tab ( id intPRIMARYKEY, str varchar(50)) ROW_FORMAT=PAGE; ERROR 1005(HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: invalid ROW_FORMAT specifier. | | Error | 1005 | Can't createtable`db1`.`tab`(errno: 140"Wrong create options")|| Warning |1030| Got error 140"Wrong create options"from storage engineInnoDB|+---------+------+--------------------------------------------------------------------+3rowsinset(0.000 sec)
- O el
KEY_BLOCK_SIZE
La opción de tabla se establece en un valor distinto de cero o laROW_FORMAT
La opción de tabla se establece en laCOMPRESSED
formato de fila, pero elinnodb_page_size
La variable del sistema se establece en un valor mayor que16k
.
SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) ROW_FORMAT=COMPRESSED; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+-----------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------------------------+ | Warning | 1478 | InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+-----------------------------------------------------------------------+ 3 rows in set (0.00 sec)
- los
DATA DIRECTORY
La opción de tabla está configurada, pero lainnodb_file_per_table
la variable del sistema no está establecida enON
.
SET GLOBAL innodb_file_per_table=OFF; SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) DATA DIRECTORY='/mariadb'; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: DATA DIRECTORY requires innodb_file_per_table. | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.000 sec)
- los
DATA DIRECTORY
La opción de tabla está configurada, pero la tabla es una tabla temporal.
SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TEMPORARY TABLE tab ( id int PRIMARY KEY, str varchar(50) ) DATA DIRECTORY='/mariadb'; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: DATA DIRECTORY cannot be used for TEMPORARY tables. | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.000 sec)
- los
INDEX DIRECTORY
La opción de tabla está configurada.
SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) INDEX DIRECTORY='/mariadb'; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: INDEX DIRECTORY is not supported | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.000 sec)
- los
PAGE_COMPRESSED
La opción de tabla está configurada en1
, por lo que la compresión de página InnoDB está habilitada, pero elROW_FORMAT
La opción de tabla se establece en algún formato de fila que no sea elCOMPACT
oDYNAMIC
formatos de fila.
SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) PAGE_COMPRESSED=1 ROW_FORMAT=COMPRESSED; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 140 | InnoDB: PAGE_COMPRESSED table can't have ROW_TYPE=COMPRESSED | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.000 sec)
- los
PAGE_COMPRESSED
La opción de tabla está configurada en1
, por lo que la compresión de página InnoDB está habilitada, pero elinnodb_file_per_table
la variable del sistema no está establecida enON
.
SET GLOBAL innodb_file_per_table=OFF; SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) PAGE_COMPRESSED=1; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 140 | InnoDB: PAGE_COMPRESSED requires innodb_file_per_table. | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.000 sec)
- los
PAGE_COMPRESSED
La opción de tabla está configurada en1
, por lo que la compresión de página InnoDB está habilitada, pero elKEY_BLOCK_SIZE
También se especifica la opción de tabla.
SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) PAGE_COMPRESSED=1 KEY_BLOCK_SIZE=4; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 140 | InnoDB: PAGE_COMPRESSED table can't have key_block_size | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.000 sec)
- los
PAGE_COMPRESSION_LEVEL
La opción de tabla está configurada, pero laPAGE_COMPRESSED
La opción de tabla está configurada en0
, por lo que la compresión de páginas InnoDB está desactivada.
SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) PAGE_COMPRESSED=0 PAGE_COMPRESSION_LEVEL=9; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 140 | InnoDB: PAGE_COMPRESSION_LEVEL requires PAGE_COMPRESSED | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.000 sec)
MariaDB hasta 10.2
En MariaDB 10.2 y anteriores, el error se genera en los siguientes casos adicionales:
- los
KEY_BLOCK_SIZE
La opción de tabla se establece en un valor distinto de cero, pero lainnodb_file_format
la variable del sistema no está establecida enBarracuda
.
SET GLOBAL innodb_file_format='Antelope'; SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) KEY_BLOCK_SIZE=4; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 1478 | InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope. | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.00 sec)
- los
ROW_FORMAT
La opción de tabla se establece en laCOMPRESSED
o laDYNAMIC
formato de fila, pero elinnodb_file_format
la variable del sistema no está establecida enBarracuda
.
SET GLOBAL innodb_file_format='Antelope'; SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) ROW_FORMAT=COMPRESSED; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+-----------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------------------------+ | Warning | 1478 | InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+-----------------------------------------------------------------------+ 3 rows in set (0.00 sec)
- los
PAGE_COMPRESSED
La opción de tabla está configurada en1
, por lo que la compresión de página InnoDB está habilitada, pero elinnodb_file_format
la variable del sistema no está establecida enBarracuda
.
SET GLOBAL innodb_file_format='Antelope'; SET SESSION innodb_strict_mode=ON; CREATE OR REPLACE TABLE tab ( id int PRIMARY KEY, str varchar(50) ) PAGE_COMPRESSED=1; SHOW WARNINGS; ERROR 1005 (HY000): Can't create table `db1`.`tab` (errno: 140 "Wrong create options") SHOW WARNINGS; +---------+------+--------------------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------------------+ | Warning | 140 | InnoDB: PAGE_COMPRESSED requires innodb_file_format > Antelope. | | Error | 1005 | Can't create table `db1`.`tab` (errno: 140 "Wrong create options") | | Warning | 1030 | Got error 140 "Wrong create options" from storage engine InnoDB | +---------+------+--------------------------------------------------------------------+ 3 rows in set (0.00 sec)
Formato de fila COMPRIMIDO
Si el modo estricto InnoDB está habilitado, y si una tabla usa el COMPRESSED
formato de fila, y si la tabla KEY_BLOCK_SIZE
es demasiado pequeño para contener una fila, la instrucción devuelve un error.
Tamaño de fila demasiado grande
Si el modo estricto InnoDB está habilitado, y si una tabla excede el tamaño de fila máximo de su formato de fila, InnoDB devolverá un error.
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Consulte Solución de problemas de errores de tamaño de fila demasiado grandes con InnoDB para obtener más información.
El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido con anticipación. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o de cualquier otra parte.
Puedes añadir valor a nuestro contenido informacional añadiendo tu veteranía en las reseñas.