MySQL:1118 - Row size too large(行大小不能超過 65535 問題)

文章目錄

  • 問題
  • 原因
  • 問題復現
    • 環境 & 版本
    • 復現過程
  • 解決方案
    • 調整列大小
    • 調整列類型
  • 個人簡介

問題

  • 當我們創建表或新增字段時,我們可能遇到下面這個問題:
1118 - 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 ,其中不包括 TEXT or BLOB 類型,建議調整一些列為 TEXT or BLOB 類型。
  • 下面我們來具體分析一下這個問題,并探討如何解決。

原因

  • MySQL 行大小最大限制為65535,不包括TEXT、BLOB。

  • 注:如果未啟用嚴格 SQL 模式, VARCHAR長度規范大于 65535 的列將轉換為 TEXT, VARBINARY長度規范大于 65535 的列將轉換為 BLOB。否則,在這兩種情況下都會發生錯誤。

  • 參考:MySQL 5.7 官方文檔:13.1.18.6 Silent Column Specification Changes

問題復現

環境 & 版本

SELECT VERSION();5.7.36-log

復現過程

  • 嘗試創建一個表 “tb_test”:
CREATE TABLE tb_test (row1 VARCHAR ( 10000 ) DEFAULT NULL,row2 VARCHAR ( 10000 ) DEFAULT NULL,row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8;// 創建失敗
1118 - 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// 為什么創建失敗
tb_test 使用 CHARSET = utf8,每個編碼字符占 3 個字節
則 tb_test 行長度為:1000 * 3 * = 90000 字節 > 63335
因此創建表失敗

解決方案

調整列大小

  • 調整列大小使行大小 <= 65535。
CREATE TABLE tb_test (row1 VARCHAR ( 10000 ) DEFAULT NULL,row2 VARCHAR ( 10 ) DEFAULT NULL,row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8;tb_test 行長度為:10000 * 3 * 2 + 10 *3  = 60020 字節 < 63335// 創建成功
CREATE TABLE tb_test (row1 VARCHAR ( 10000 ) DEFAULT NULL,row2 VARCHAR ( 10 ) DEFAULT NULL,row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8
> OK
> 查詢時間: 0.087s

調整列類型

  • 調整其中部分列類型為 TEXT or BLOBs(不計入行大小),使行大小 <= 65535。
CREATE TABLE tb_test(row1 VARCHAR ( 10000 ) DEFAULT NULL,row2 text DEFAULT NULL,row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8將 row2 調整為 text 類型
tb_test 行長度為:10000 * 3 * 2 = 60000 字節 < 63335// 創建成功
CREATE TABLE tb_test(row1 VARCHAR ( 10000 ) DEFAULT NULL,row2 text DEFAULT NULL,row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8
> OK
> 查詢時間: 0.023s

個人簡介

👋 你好,我是 Lorin 洛林,一位 Java 后端技術開發者!座右銘:Technology has the power to make the world a better place.

🚀 我對技術的熱情是我不斷學習和分享的動力。我的博客是一個關于Java生態系統、后端開發和最新技術趨勢的地方。

🧠 作為一個 Java 后端技術愛好者,我不僅熱衷于探索語言的新特性和技術的深度,還熱衷于分享我的見解和最佳實踐。我相信知識的分享和社區合作可以幫助我們共同成長。

💡 在我的博客上,你將找到關于Java核心概念、JVM 底層技術、常用框架如Spring和Mybatis 、MySQL等數據庫管理、RabbitMQ、Rocketmq等消息中間件、性能優化等內容的深入文章。我也將分享一些編程技巧和解決問題的方法,以幫助你更好地掌握Java編程。

🌐 我鼓勵互動和建立社區,因此請留下你的問題、建議或主題請求,讓我知道你感興趣的內容。此外,我將分享最新的互聯網和技術資訊,以確保你與技術世界的最新發展保持聯系。我期待與你一起在技術之路上前進,一起探討技術世界的無限可能性。

📖 保持關注我的博客,讓我們共同追求技術卓越。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208779.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208779.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208779.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12.Mysql 多表數據橫向合并和縱向合并

Mysql 函數參考和擴展&#xff1a;Mysql 常用函數和基礎查詢、 Mysql 官網 Mysql 語法執行順序如下&#xff0c;一定要清楚&#xff01;&#xff01;&#xff01;運算符相關&#xff0c;可前往 Mysql 基礎語法和執行順序擴展。 (8) select (9) distinct (11)<columns_name…

【力扣熱題100】287. 尋找重復數(弗洛伊德的烏龜和兔子方法)

【力扣熱題100】287. 尋找重復數 寫在最前面理解解決 "尋找重復數" 問題的算法問題描述弗洛伊德的烏龜和兔子方法為什么這個方法有效&#xff1f; 代碼復雜度 總結回顧 寫在最前面 刷一道力扣熱題100吧 難度中等 https://leetcode.cn/problems/find-the-duplicate-…

HTML 常用表單元素使用以及注解

一、表單的用途 HTML 表單用于收集用戶的輸入信息。 HTML 表單表示文檔中的一個區域&#xff0c;此區域包含交互控件&#xff0c;將用戶收集到的信息發送到 Web 服務器。 一個表單有三個基本組成部分&#xff1a; 表單標簽&#xff1a;這包含了處理表單數據所用的URL以及數據…

vue使用$router.push()或者$router.go(),重新返回上一頁不走生命周期

是因為在App.vue中&#xff0c;vue路由&#xff08;router-view&#xff09;組件使用路由緩存組件(keep-alive)包裹著&#xff0c;導致不重新走生命周期&#xff0c;這樣可以提高運行效率&#xff0c;但有時候&#xff0c;我們需要重新加載生命周期刷新數據。 解決方案&#x…

Java Web應用小案例 - 實現用戶登錄功能

文章目錄 一、使用純JSP方式實現用戶登錄功能&#xff08;一&#xff09;項目概述&#xff08;二&#xff09;實現步驟1、創建Web項目2、創建登錄頁面 二、使用JSPServlet方式實現用戶登錄功能三、使用JSPServletDB方式實現用戶登錄功能 一、使用純JSP方式實現用戶登錄功能 &a…

ubuntu22.04安裝 nvidia-cudnn

nvidia-cudnn 是 NVIDIA CUDA 深度神經網絡庫&#xff08;CUDA Deep Neural Network library&#xff09;的縮寫。這是一個由 NVIDIA 提供的庫&#xff0c;用于加速深度學習應用程序。它包含了針對深度神經網絡中常用操作&#xff08;如卷積、池化、歸一化、激活層等&#xff0…

【工具】機器之間傳輸文件的常用方式

0、背景 QA的工作工程中,在不同服務器或者本地機器與服務器之間進行文件或目錄的上傳或者下載是非常普遍的場景,為此本文將常用的好用的工具一并做個總結,大家有其他的利器也歡迎評論區留言。 1、 scp命令 這是平常使用最多的命令,可以在相互連通的服務之間拷貝文件。命…

【Linux】如何清空某個文件的內容

cat /dev/null > file1 清空某個文件的內容使用cat /dev/null > file1&#xff0c;它將 /dev/null 的內容&#xff08;空內容&#xff09;重定向到 file1。 如下所示&#xff0c;file1文件里的內容被清空。 錯誤寫法 錯誤寫法是&#xff1a;cat file1 > /dev/null&…

linuxc語udp發送程序

以下是一個基于UDP通信的C程序&#xff0c;用于發送含有指定格式的數據包。該程序把數據分成若干個包&#xff0c;每個包包含4字節數據包頭數據長度數據內容&#xff0c;每個包最大8192字節。 #include <stdio.h> #include <stdlib.h> #include <string.h> …

華為OD機試真題-小明找位置-2023年OD統一考試(C卷)

題目描述&#xff1a; 小朋友出操&#xff0c;按學號從小到大排成一列&#xff1b;小明來遲了&#xff0c;請你給小明出個主意&#xff0c;讓他盡快找到他應該排的位置。 算法復雜度要求不高于nLog(n)&#xff1b;學號為整數類型&#xff0c;隊列規模<10000&#xff1b; 輸…

持續集成交付CICD:CentOS 7 安裝 Nexus 3.63

目錄 一、實驗 1.CentOS 7 安裝Nexus3.63 二、問題 1.安裝Nexus報錯 2.Nexus啟動停止相關命令 一、實驗 1.CentOS 7 安裝Nexus3.63 &#xff08;1&#xff09;當前操作系統版本&JDK版本 cat /etc/redhat-releasejava -version&#xff08;2&#xff09;下載Nexus新…

藍橋杯 java基礎

1. AB問題I 時間限制&#xff1a;2.000S 空間限制&#xff1a;32MB 題目描述 你的任務是計算ab。 輸入描述 輸入包含一系列的a和b對&#xff0c;通過空格隔開。一對a和b占一行。 輸出描述 對于輸入的每對a和b&#xff0c;你需要依次輸出a、b的和。 如對于輸入中的第二…

面試經典150題(5-7)

leetcode 150道題 計劃花兩個月時候刷完&#xff0c;今天&#xff08;第二天&#xff09;完成了兩道(5-7)150&#xff1a; (169. 多數元素) 題目描述&#xff1a; 給定一個大小為 n 的數組 nums &#xff0c;返回其中的多數元素。多數元素是指在數組中出現次數 大于 ? n/2 ?…

int 和 Integer 有什么區別,還有 Integer 緩存的實現

?前言? ??Java本文主要介紹Java int 和 Integer的區別以及Integer 緩存的實現 &#x1f352;歡迎點贊 &#x1f44d; 收藏 ?留言評論 &#x1f4dd;私信必回喲&#x1f601; &#x1f352;博主將持續更新學習記錄收獲&#xff0c;友友們有任何問題可以在評論區留言 文章目…

用C++實現隊列順序結構的基本操作

//隊列順序結構的基本操作&#xff1a; #include"stdio.h" #include"String" #define QueueSize 100 typedef char ElemType; typedef struct { ElemType data[QueueSize]; /*保存隊中元素*/int front,rear; /*隊頭和隊尾指針*/ } SqQueue; void Init…

使用STM32定時器實現精確的時間測量和延時

?作者簡介&#xff1a;熱愛科研的嵌入式開發者&#xff0c;修心和技術同步精進&#xff0c; 代碼獲取、問題探討及文章轉載可私信。 ? 愿你的生命中有夠多的云翳,來造就一個美麗的黃昏。 &#x1f34e;獲取更多嵌入式資料可點擊鏈接進群領取&#xff0c;謝謝支持&#xff01;…

stm32Flash操作

//G0B0 flash大小 0x08000000-0x0807FFFF 512K(0400 1K)//2k 1頁 //初始化標記數據地址 放最前面 脫機燒寫器可擦除掉 #define CONST_INITMARKDATA_ADDRESS (0x0807D000UL) //2k 1頁 //射頻數據地址 #define CONST_FREQDATA_ADDRESS (0x0807F000UL) //2…

大數據技術4:Lambda和Kappa架構區別

前言&#xff1a;在大數據處理領域&#xff0c;兩種突出的數據架構已成為處理大量數據的流行選擇&#xff1a;Lambda 架構和 Kappa 架構。這些架構為實時處理和批處理提供了強大的技術解決方案&#xff0c;使組織能夠從其數據中獲得有價值的見解。隨著互聯網時代來臨&#xff0…

Python VSCode 配置固定的腳本入口

Python VSCode 配置固定的腳本入口 打開或者新建一個啟動配置 選擇 .vscode目錄下 launch.json文件 將 “program”: “${file}” 替換成 “program”: “mian.py”, //完成你自己的入口.py文件名即可 json啟動配置文件 {// Use IntelliSense to learn about possible attrib…

4-redis高級-redis持久化(RDB 持久化方案、AOF持久化、RDB和AOF混合持久化)、redis主從復制

1 redis持久化 1.1 RDB 持久化方案 1.2 AOF持久化 1.3 混合持久化 2 redis主從復制 1 redis持久化 # 把redis數據從內存保存到硬盤上的過程稱之為持久化# 所有的數據庫&#xff0c;持久化方案快照&#xff1a;某時某刻數據的一個完成備份-mysql的Dump&#xff1a; mysqldump …