mysql建表的参数ROW_FORMAT建议设用什么类型
时间: 2024-04-29 21:20:15 浏览: 138
对于MySQL建表的ROW_FORMAT参数,建议根据具体的需求和场景选择合适的类型。以下是一些常见的ROW_FORMAT类型及其特点:
1. ROW_FORMAT=COMPACT:这是MySQL的默认行格式,它会尽可能地压缩行数据,节省存储空间。但是,它对于较长的BLOB或TEXT类型的列存储效率较低。
2. ROW_FORMAT=DYNAMIC:这种行格式可以根据行数据的大小自动选择合适的存储方式,可以优化表的存储空间和查询性能。但是,它需要更多的CPU和内存资源。
3. ROW_FORMAT=REDUNDANT:这种行格式会在每个行数据中保留一些冗余信息,以便于快速访问。但是,它需要更多的存储空间,并且不支持压缩。
4. ROW_FORMAT=COMPRESSED:这种行格式会对行数据进行压缩,节省存储空间。但是,它需要更多的CPU和内存资源,并且对于更新操作可能会比较慢。
综上所述,如果表中包含大量的BLOB或TEXT类型的列,建议使用ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPRESSED;如果表中的行数据比较短,建议使用ROW_FORMAT=COMPACT。需要注意的是,不同的ROW_FORMAT类型在不同的MySQL版本中可能会有所差异,建议在使用前先了解具体的版本支持情况。
相关问题
mysql8.0建表 SQL 错误 [1118] [42000]: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
这个错误是由于 MySQL 8.0 默认的行格式导致的。在 MySQL 8.0 中,行格式为 `DYNAMIC`,且每行的最大大小限制为 8126 字节当你尝试创建一个超过该限制的表时,就会出现 "Row size too large" 的错误。
为了解决这个问题,你可以尝试以下方法:
1. 使用 `ROW_FORMAT=DYNAMIC` 或 `ROW_FORMAT=COMPRESSED` 行格式来创建表。这些行格式允许更大的行大小。例如:
```sql
CREATE TABLE your_table (
column1 INT,
column2 VARCHAR(4000),
column3 TEXT,
...
) ROW_FORMAT=DYNAMIC;
```
或
```sql
CREATE TABLE your_table (
column1 INT,
column2 VARCHAR(4000),
column3 TEXT,
...
) ROW_FORMAT=COMPRESSED;
```
2. 将需要存储大量数据的列更改为 `TEXT` 或 `BLOB` 类型。这将使这些列以外部存储的方式进行存储,而不是内联存储在行中。例如,将 `VARCHAR` 类型列改为 `TEXT` 类型:
```sql
CREATE TABLE your_table (
column1 INT,
column2 TEXT,
column3 TEXT,
...
);
```
请注意,将列更改为 `TEXT` 或 `BLOB` 类型可能会影响查询和索引的性能。
3. 如果以上方法仍然无法解决问题,你可以考虑调整 MySQL 的配置文件,增加 `innodb_log_file_size` 和 `innodb_strict_mode` 的值。请注意,在修改配置文件之前,确保备份了重要的数据和配置文件。
这些方法应该能够帮助你解决 "Row size too large" 错误。如果问题仍然存在,建议根据你的具体需求,合理设计表结构,并确保每行的大小不超过 MySQL 的限制。
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='特采单';
这是一段 MySQL 数据库的建表语句,其中:
- ENGINE=InnoDB 表示使用 InnoDB 存储引擎,它支持事务和行级锁等功能,常用于高并发的应用场景。
- DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 表示设置字符集为 utf8mb4,其中 mb4 表示支持四字节字符,这是为了兼容 Emoji 表情等特殊字符。COLLATE=utf8mb4_0900_ai_ci 表示使用 utf8mb4 排序规则,这里的 ai_ci 表示不区分大小写。
- ROW_FORMAT=DYNAMIC 表示使用动态行格式,这种格式可以根据行的大小自动选择存储方式,从而减小存储空间的浪费。
- COMMENT='特采单' 表示给表设置注释为“特采单”,方便后续的维护和管理。
阅读全文