欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MYSQL中varchar和TEXT的相關(guān)問題詳析

 更新時(shí)間:2022年12月15日 11:07:51   作者:Lee5488  
varchar 和 text 是 MySQL 字符存儲(chǔ)爭(zhēng)議比較多的領(lǐng)域,下面這篇文章主要給大家介紹了關(guān)于MYSQL中varchar和TEXT,文中介紹的非常詳細(xì),需要的朋友可以參考下

起因

引發(fā)原因:門店需求新增自提門店,自提門店需要加自提點(diǎn)圖片,在渠道店上引入了圖片地址img_url 的字段,字段值定義為text not null 但是因?yàn)閠ext字段不能設(shè)置默認(rèn)值,所以未設(shè)置默認(rèn)值;

上線時(shí)候先上線了數(shù)據(jù)庫字段,代碼還未上線,線上新增渠道店的時(shí)候?qū)е略撟侄螢閚ull所以不能新增渠道店報(bào)錯(cuò)。

解決方案:后緊急工單更改了img_url字段設(shè)置字段類型為varchar(2000) 默認(rèn)值為'' 線上可以新增渠道店;

問題分析:text和varchar

根據(jù)阿里巴巴開發(fā)手冊(cè)嵩山版 MySQL 數(shù)據(jù)庫篇

建表規(guī)約第八條:

【強(qiáng)制】 varchar 是可變長字符串,不預(yù)先分配存儲(chǔ)空間,長度不要超過 5000,如果存儲(chǔ)長度

大于此值,定義字段類型為 text ,獨(dú)立出來一張表,用主鍵來對(duì)應(yīng),避免影響其它字段索引效

第十三條:

 【推薦】字段允許適當(dāng)冗余,以提高查詢性能,但必須考慮數(shù)據(jù)一致。冗余字段應(yīng)遵循:

1) 不是頻繁修改的字段。

2) 不是唯一索引的字段。

3) 不是 varchar 超長字段,更不能是 text 字段。

正例:各業(yè)務(wù)線經(jīng)常冗余存儲(chǔ)商品名稱,避免查詢時(shí)需要調(diào)用 IC 服務(wù)獲取。

ORM 映射

第一條:

【強(qiáng)制】在表查詢中,一律不要使用 * 作為查詢的字段列表,需要哪些字段必須明確寫明。

說明:1)增加查詢分析器解析成本。2)增減字段容易與 resultMap 配置不一致。3)無用字段增加網(wǎng)絡(luò)

消耗,尤其是 text 類型的字段。

mysql的官方文檔

mysql的官方文檔上寫了varchar類型最長可以指定為65535字節(jié),

但我們建表的時(shí)候,實(shí)際上因?yàn)橹付俗址膯栴},如果是在utf8的字符編碼下,實(shí)際上最大的長度只能為 21845,因?yàn)閡tf8一個(gè)字符占3個(gè)字節(jié)

utf8編碼下
Column length too big for column 'varchar1' (max = 21845); use BLOB or TEXT instead
 
utf8-mb4編碼下
 Column length too big for column 'varchar1' (max = 16383); use BLOB or TEXT instead
 
 但是其實(shí)65535的限制是在一行數(shù)據(jù)里面限制的總數(shù)為65535,即:
 如果我們有門店表:貨號(hào)指定為21845長度,品名指定為21845長度,還是不能建表成功,因?yàn)?5535的限制是一行的所有字段值加起來的限制。
 (此處不僅限制varchar,是除了BLOBs的類型都會(huì)被限制)
 會(huì)出現(xiàn)如下報(bào)錯(cuò):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數(shù)據(jù)類型

可以存儲(chǔ)1-4GB字節(jié)長度,MySQL并不把TEXT數(shù)據(jù)存儲(chǔ)在內(nèi)存中,而是存儲(chǔ)與磁盤中,所以MySQL每次必須從磁盤讀取,導(dǎo)致它比varchar要慢

TINYTEXT 255字節(jié) (2KB)

TEXT 65,535字節(jié) (64KB)

MEDIUMTEXT 16,777,215字節(jié)(16M)

LONGTEXT 4,294,967,295字節(jié)(4GB)

附:MYSQL中varchar和TEXT差異點(diǎn)

text 字段,MySQL不允許有默認(rèn)值。建立索引必須給出前綴索引長度。

varchar 允許有默認(rèn)值,對(duì)索引長度沒限制。

注:InnoDB 引擎單一字段索引的默認(rèn)長度最大為 767 字節(jié),MyISAM 為 1000 字節(jié)。例如字符編碼是 utf8,那么 varchar 的索引最大長度是 256 個(gè)字符。超出限制會(huì)導(dǎo)致索引創(chuàng)建不成功,轉(zhuǎn)而需要?jiǎng)?chuàng)建前綴索引。設(shè)置InnoDB_large_prefix = 1 可以增大限制,允許索引使用動(dòng)態(tài)壓縮,但是表的 row_format 必須是 compressed 或者 dynamic??梢允顾饕虚L度大于767bytes,但是總長度不能大于 3072 bytes。

總結(jié):

varchar字段可以設(shè)置,但不要超過5000長度

text字段可以使用,但如果非必要應(yīng)盡量避免,可以采用獨(dú)立表對(duì)應(yīng)

到此這篇關(guān)于MYSQL中varchar和TEXT的文章就介紹到這了,更多相關(guān)MYSQL varchar和TEXT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql下修改engine引擎的方法

    mysql下修改engine引擎的方法

    修改mysql的引擎為INNODB,可以使用外鍵,事務(wù)等功能,性能高。
    2011-08-08
  • MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    日期時(shí)間處理對(duì)大家來說應(yīng)該都不陌生了,下面這篇文章主要給大家介紹了關(guān)于MySQL常用的日期時(shí)間函數(shù),文中通過圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MySQL8.0高可用MIC的實(shí)現(xiàn)

    MySQL8.0高可用MIC的實(shí)現(xiàn)

    本文介紹了如何實(shí)現(xiàn)MySQL8.0高可用MIC,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • SQL update多表關(guān)聯(lián)更新方法解讀

    SQL update多表關(guān)聯(lián)更新方法解讀

    這篇文章主要介紹了SQL update 多表關(guān)聯(lián)更新方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • mysql函數(shù)之常見數(shù)學(xué)函數(shù)示例詳解

    mysql函數(shù)之常見數(shù)學(xué)函數(shù)示例詳解

    文章總結(jié)了多個(gè)數(shù)學(xué)和字符串處理函數(shù)的功能和使用示例,包括格式化數(shù)字、計(jì)算絕對(duì)值、平方根、取整、生成隨機(jī)數(shù)、四舍五入、截?cái)唷⒎祷胤?hào)、冪運(yùn)算以及最大值最小值的計(jì)算,感興趣的朋友一起看看吧
    2025-03-03
  • mysql 字符串函數(shù)收集比較全

    mysql 字符串函數(shù)收集比較全

    mysql 字符串函數(shù)收集,需要的朋友可以參考下。
    2010-03-03
  • 基于mysql多實(shí)例安裝的深入解析

    基于mysql多實(shí)例安裝的深入解析

    本篇文章是對(duì)mysql多實(shí)例安裝進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • SQL如何獲取目標(biāo)時(shí)間點(diǎn)或日期的方法實(shí)例

    SQL如何獲取目標(biāo)時(shí)間點(diǎn)或日期的方法實(shí)例

    日期獲取在我們?nèi)粘i_發(fā)中經(jīng)常會(huì)遇到,這篇文章主要給大家介紹了關(guān)于SQL如何獲取目標(biāo)時(shí)間點(diǎn)或日期的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • MySQL出現(xiàn)錯(cuò)誤代碼:1055的三種解決方案(推薦!)

    MySQL出現(xiàn)錯(cuò)誤代碼:1055的三種解決方案(推薦!)

    當(dāng)我們?cè)诓樵儠r(shí)使用group by語句,出現(xiàn)錯(cuò)誤代碼:1055;執(zhí)行發(fā)生錯(cuò)誤語句,本文給大家介紹了MySQL出現(xiàn)錯(cuò)誤代碼:1055的三種解決方案,文中有詳細(xì)的代碼示例和圖文供大家參考,需要的朋友可以參考下
    2024-05-05
  • MySQL緩存的查詢和清除命令使用詳解

    MySQL緩存的查詢和清除命令使用詳解

    這篇文章主要介紹了MySQL緩存的查詢和清除命令使用詳解,對(duì)于一些不常改變數(shù)據(jù)且有大量相同sql查詢的表,查詢緩存會(huì)顯得比較有用一些,需要的朋友可以參考下
    2015-12-12

最新評(píng)論