确定MySQL行的存储要求

时间:2014-05-06 13:03:51

标签: mysql sql

您好我在我的网络应用上使用新表获得了此错误:

Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

所以我减少了一些varchar列的长度以保持低于该值。

我想知道完整填充行可以使用多少字节。

是否有命令要知道:连续达到65535之前仍有多少字节可用?

1 个答案:

答案 0 :(得分:2)

以下方法不完整,因为CASE仅涵盖我需要的那些类型(其他人请参阅here)。其他类型获得“8”通常没问题,除非您有CHARTEXTBLOB列。 TEXTBLOB各占256个字节。

欢迎每个人贡献: - )

SELECT COLUMN_NAME, COLUMN_TYPE,
CASE SUBSTRING_INDEX(COLUMN_TYPE,'(',1)
WHEN 'decimal' THEN FLOOR((NUMERIC_PRECISION+8)/9)*4
WHEN 'integer' THEN 4
WHEN 'varchar' THEN CHARACTER_OCTET_LENGTH
WHEN 'bits' THEN FLOOR((NUMERIC_PRECISION+7)/8)
WHEN 'float' THEN 8
ELSE 4
END AS size
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='<the name of your database>'
AND TABLE_NAME='<the name of your table>';

所以:

SELECT SUM(size) FROM (
    SELECT COLUMN_NAME, COLUMN_TYPE,
    CASE
    ...
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA='<the name of your database>'
    AND TABLE_NAME='<the name of your table>'
) AS result;