Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.

来源:https://www.cnblogs.com/huozhonghun/archive/2023/05/17/17407829.html
-Advertisement-
Play Games

問題描述 新建表或者修改表varchar欄位長度的時候,出現這個錯誤 Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes stora ...


問題描述

新建表或者修改表varchar欄位長度的時候,出現這個錯誤

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

在這裡插入圖片描述
大概意思就是行大小太大,不能超過65535
長度改為21842就正常了,這是為什麼?


分析

最終我們執行正確的SQL語句

CREATE TABLE `all_type_forlan` (
  `id` int(20) NOT NULL COMMENT 'id',
  `base_info` varchar(21842) DEFAULT NULL COMMENT '基本詳細',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這裡的21842長度是怎麼來的?
首先它是什麼意思?表示21842字元

首先來瞭解幾個規則,對我們的字元數有影響的規則

1、MySQL規則

編碼規則

不同字元集下,占用空間不一樣
gbk編碼中,1個字元占用2個位元組
utf8編碼(預設)中,1個字元占用3個位元組
utf8mb4編碼中,1個字元占用4個位元組

存儲規則

varchar除了存儲字元,還需要額外的空間來存儲長度和是否為NULL,分別占用1-2位元組和1位元組

行大小限制

MySQL 表的內部表示具有 65,535 位元組的最大行大小限制,即使存儲引擎能夠支持更大的行。 BLOB 和 TEXT列僅對行大小限制貢獻 9 到 12 個位元組,因為它們的內容與行的其餘部分分開存儲

2、驗證

根據行最大65535位元組,我們選擇utf8編碼,那我們最多可以設置的字元數為65535/3=21845
在這裡插入圖片描述
還是報錯了,因為我們還需要減去額外的存儲(長度和是否為NULL),65535-3=65532/2=21844,設置成21844就成功了

驗證NULL占用1個位元組

65535-1-3=65531/3=21,843.66666666667,向下取整,最多只能21843,所以報錯啦,看下圖
說明:tinyint占用1個位元組、varchar的長度和是否為NULL占用3個位元組
在這裡插入圖片描述
我們把varchar欄位設為不是null,此時21844可以設置成功
說明:65535-1-2=65532/3=21844

3、結論

所以,至此,我們就知道為什麼21842才可以了
計算規則=(65535-4-2-1)/3=21,842.66666666667,向下取整,就是21842
說明:int占用4個位元組,varchar的長度和是否為NULL占用3個位元組,使用了utf8編碼,1個字元占用3個位元組


解決方案

如果長度需要加長,將欄位類型改為TEXT或BLOB
如果只是想設置一個最大值,那可以根據計算規則進行調整


拓展

為什麼我們經常使用varchar(255),不使用varchar(256)?

首先我們使用的varchar,除了存儲字元內容,還需要額外存儲長度和是否為NULL

因為varchar類型的欄位長度在超過255後,需要2個位元組來存儲長度,因為1個位元組=8位,可以表示的長度為255,2個位元組=16位,可以表示的長度為65535
所以varchar(256)會比varchar(255)多占用1個位元組來存儲長度

MySQL列數限制

MySQL 對每個表有 4096 列的硬性限制,但對於給定的表,有效最大值可能會更少,因為表的最大行大小限制了列的數量

int類型的占用空間的大小範圍

在這裡插入圖片描述


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一章 外鍵 在實際開發項目中,一個健壯的數據表一定有很好的參照完整性,為保證數據的完整性,需將兩表建立關係。這時可通過外鍵約束來實現 1.1、介紹 什麼是外鍵約束? 在另一張表中引用另一張表的主鍵約束或唯一約束。 例如:如下操作創建表 create table grade( id int prim ...
  • 1.Greenplum資料庫中segment故障檢測 1.1概述 Greenplum資料庫伺服器(Postgres)有一個子進程,該子進程為ftsprobe,主要作用是處理故障檢測。 ftsprobe 監視Greenplum資料庫陣列,它以可以配置的間隔連接並掃描所有segment和資料庫進程。 如 ...
  • DQL語句 1、格式 select 列名*N from 表名 where 查詢條件1 and/or 查詢條件2 group by 列 Having 分組條件 Order by 排序 2、規則 sql在書寫時除了查詢條件外,大小寫都可以 select * from user where uname=' ...
  • [MySQL事務一文搞懂] 1、什麼是事務? 事務(Transaction),顧名思義就是要做的或所做的事情,資料庫事務指的則是作為單個邏輯工作單元執行的一系列操作(SQL語句)。這些操作要麼全部執行,要麼全部不執行。 2、為什麼需要事務 把一系列sql放入一個事務中有兩個目的: 為資料庫操作提供了 ...
  • 摘要:5月16日,“數智深耕 讓美好發生 2023華為雲城市峰會廣州站”成功舉行。 5月16日,“數智深耕 讓美好發生 2023華為雲城市峰會廣州站”成功舉行。大會聚集了眾多城市管理者、產業領袖、企業家和媒體,共同探討工業數字化發展新趨勢,共謀工業數字化發展之路。華為公司副總裁、華為雲中國區總裁張修 ...
  • 前言 從今天開始本系列文章就帶各位小伙伴學習資料庫技術。資料庫技術是Java開發中必不可少的一部分知識內容。也是非常重要的技術。本系列教程由淺入深, 全面講解資料庫體系。 非常適合零基礎的小伙伴來學習。 全文大約 【1297】字,不說廢話,只講可以讓你學到技術、明白原理的純乾貨!本文帶有豐富案例及配 ...
  • 在企業級應用中,數據的安全性和隱私保護是極其重要的。Spark 作為數棧底層計算引擎之一,必須確保數據只能被授權的人員訪問,避免出現數據泄露和濫用的情況。為了實現Spark SQL 對數據的精細化管理及提高數據的安全性和可控性,數棧基於 Apache Ranger 實現了 Spark SQL 對數據 ...
  • 隨著 Redis 資料庫的流行和廣泛應用,Redis 的開發、管理需求日益增多,數據管理產品的好用與否將直接影響研發效能的高低。在 Redis 官網提供的 RedisInsight、Redis CLI 提供一定的可視化管理、命令執行及語法提示等能力,但缺乏人員操作許可權管控(6.0以前的低版本)、人員... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...