为何MariaDB行大小限制在Windows生效而同版本Linux实例不生效?
问题原因
导致跨平台行为差异的核心是两个MariaDB实例的innodb_strict_mode参数配置不一致:
- Windows环境下的MariaDB默认开启
innodb_strict_mode:此时建表时非BLOB/TEXT类型的字段总长度如果超过服务器层规定的65535字节上限,会直接抛出ERROR 1118 (42000): Row size too large报错。你定义的4个VARCHAR(32767)字段按单字节字符集计算总长度就已经超过130KB,远高于上限,所以直接报错符合预期。 - Linux官方容器版的MariaDB默认关闭
innodb_strict_mode:此时遇到行大小超过限制的场景,数据库不会直接抛出错误,而是自动将超长的VARCHAR字段转换为TEXT类型,规避长度限制,仅输出对应警告(你执行建表语句时返回的4个警告就对应4个VARCHAR字段的类型转换)。
验证方法
你可以自行操作确认差异:
- 在两个实例分别执行
SHOW VARIABLES LIKE 'innodb_strict_mode';,即可看到参数开关的差异 - 在Linux实例执行
SHOW CREATE TABLE t_postgres1.binary_types;查看最终表结构,就能看到四个原本定义为VARCHAR(32767)的字段,实际已经被自动转换为TEXT类型
内容的提问来源于stack exchange,提问作者mark d drake
相关产品推荐
相关产品推荐

