SQL错误(1118):行大小过大。所使用的表类型的最大行大小,不包括BLOBs。

8 浏览
0 Comments

SQL错误(1118):行大小过大。所使用的表类型的最大行大小,不包括BLOBs。

我已经创建了一个MySQL数据库表。我必须在一个表中创建195个列。其中190个列的数据类型是VARCHAR,5个列的数据类型是text。每个列的长度都是500。

实际上,我想在一个数据库表中创建1000个列,并且我想在每个列中使用VARCHAR数据类型。现在,当我在数据库表中创建新列时,我遇到了这个错误:

SQL错误(1118):行大小过大。所使用的表类型的最大行大小(不包括BLOBs)为65535。这包括存储开销,请查看手册。您必须将一些列更改为TEXT或BLOBs。

0
0 Comments

(SQL错误(1118):行大小过大。用于的表类型的最大行大小,不包括BLOBs)这个问题出现的原因是由于MySQL中的行大小限制。解决方法是将数据类型从VARCHAR更改为TEXT,这将克服行的限制。

下面的查询由于行的限制而导致错误:

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),

c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),

f VARCHAR(10000), g VARCHAR(6000)) ENGINE=InnoDB CHARACTER SET latin1;

ERROR 1118 (42000): Row size too large. The maximum row size for the used

table type, not counting BLOBs, is 65535. This includes storage overhead,

check the manual. You have to change some columns to TEXT or BLOBs

但是,当您将其更改为TEXT数据类型时,它可以工作。在以下的MyISAM示例中,将列更改为TEXT类型可以避免65,535字节的行大小限制,并且允许操作成功,因为BLOB和TEXT列只对行大小贡献9到12个字节。

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),

c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),

f VARCHAR(10000), g TEXT(6000)) ENGINE=MyISAM CHARACTER SET latin1;

Query OK, 0 rows affected (0.02 sec)

进一步阅读:

https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html

我自问的问题是:“为什么我会使用VARCHAR而不总是使用TEXT?”对字符串使用硬编码长度限制听起来很像FORTRAN77风格。在我看来,一个强大的数据库设计能够处理设计师没有预料到的用户输入...而且不会浪费空间来存储较短的字符串。使用这种古老的技术的唯一原因可能是性能。是吗?如果是这样的话:对性能的影响有多大?

使用VARCHAR或其他数据类型的一个原因是为了对这些数据进行索引以进行搜索和连接。根据stackoverflow.com/questions/1203710/...的回答,VARCHAR在搜索方面比TEXT快3倍。

0
0 Comments

SQL错误(1118):行大小过大。所使用的表类型的最大行大小,不包括BLOBs。

在运行数据库上的SQL查询时,可能会遇到上述错误。这个错误的出现有以下原因和解决方法。

原因:

1. 表中的列太多或者列的数据类型太长,导致每一行的大小超过了数据库所支持的最大行大小限制。

2. 使用的数据库引擎不支持较大的行大小,如MyISAM引擎的最大行大小为65,535字节。

解决方法:

1. 减少表中的列数或者缩短列的数据类型,以减小每一行的大小。

2. 使用InnoDB引擎替代MyISAM引擎,因为InnoDB引擎支持更大的行大小。

3. 修改数据库配置,增大最大行大小的限制。

- 执行以下SQL查询来关闭严格模式:

SET GLOBAL innodb_strict_mode=OFF;

- 修改MySQL配置文件(my.cnf或my.ini),增加或修改以下参数:

innodb_log_file_size=xxxM

innodb_log_buffer_size=xxxM

innodb_page_size=xxx

其中,xxx表示所设置的大小,单位可以是M(兆字节)或者字节。

通过以上方法,可以解决SQL错误(1118):行大小过大的问题。请根据实际情况选择适合的解决方法,并进行相应的配置或修改。

0
0 Comments

这个问题的出现原因是数据库设计存在缺陷。MySQL中每行的最大大小为65,535字节。假设每个字符占用1个字节,500 X 1000 = 50,000字节,接近65,535字节的限制。对于使用latin1字符集的VARCHAR(L)列,每个列需要1个字节来保存长度L,所以现在总大小为501,000字节。对于存储多字节字符的VARCHAR列,实际的最大字符数要小于这个值。例如,utf8字符可以每个字符需要3个字节。500 X 4 X 1000 = 2,000,000字节(每个字符3个字节+1个字节的长度)。更多信息可以在MySQL文档中查看:MySQL最大列数数据类型存储要求。建议在继续之前学习更多关于数据库设计的知识。感谢david strachan的建议。我不同意你的观点,认为“你的数据库设计有缺陷”——我认为MySQL的数据存储模型有缺陷。

0