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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...