亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

起因

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

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

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

問題分析:text和varchar

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

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

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

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

第十三條:

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

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

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

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

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

ORM 映射

第一條:

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

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

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

mysql的官方文檔

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

但我們建表的時候,實際上因為指定了字符集的問題,如果是在utf8的字符編碼下,實際上最大的長度只能為 21845,因為utf8一個字符占3個字節(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
 
 但是其實65535的限制是在一行數(shù)據(jù)里面限制的總數(shù)為65535,即:
 如果我們有門店表:貨號指定為21845長度,品名指定為21845長度,還是不能建表成功,因為65535的限制是一行的所有字段值加起來的限制。
 (此處不僅限制varchar,是除了BLOBs的類型都會被限制)
 會出現(xiàn)如下報錯: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ù)類型

可以存儲1-4GB字節(jié)長度,MySQL并不把TEXT數(shù)據(jù)存儲在內(nèi)存中,而是存儲與磁盤中,所以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差異點

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

varchar 允許有默認值,對索引長度沒限制。

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

總結(jié):

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

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

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

相關(guān)文章

  • 詳解MySQL存儲過程的創(chuàng)建和調(diào)用

    詳解MySQL存儲過程的創(chuàng)建和調(diào)用

    這篇文章主要為大家介紹了MySQL存儲過程的創(chuàng)建和調(diào)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • MySQL 大表的count()優(yōu)化實現(xiàn)

    MySQL 大表的count()優(yōu)化實現(xiàn)

    這篇文章主要介紹了MySQL 大表的count()優(yōu)化實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Mysql配置主從復(fù)制-GTID模式詳解

    Mysql配置主從復(fù)制-GTID模式詳解

    這篇文章主要介紹了Mysql配置主從復(fù)制-GTID模式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • CentOS7編譯安裝MySQL5.7.24的教程詳解

    CentOS7編譯安裝MySQL5.7.24的教程詳解

    這篇文章主要介紹了CentOS7編譯安裝MySQL5.7.24的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • MySQL 數(shù)據(jù)庫的臨時文件究竟儲存在哪里

    MySQL 數(shù)據(jù)庫的臨時文件究竟儲存在哪里

    MySQL使用環(huán)境變量TMPDIR的值作為保存臨時文件的目錄的路徑名。
    2009-02-02
  • mysql數(shù)據(jù)庫遷移數(shù)據(jù)目錄至另一臺服務(wù)器詳細步驟

    mysql數(shù)據(jù)庫遷移數(shù)據(jù)目錄至另一臺服務(wù)器詳細步驟

    MySQL數(shù)據(jù)庫轉(zhuǎn)移到新服務(wù)器是指將現(xiàn)有的MySQL數(shù)據(jù)庫遷移至一個新的服務(wù)器環(huán)境中,下面這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫遷移數(shù)據(jù)目錄至另一臺服務(wù)器的詳細步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • 如何使用分區(qū)處理MySQL的億級數(shù)據(jù)優(yōu)化

    如何使用分區(qū)處理MySQL的億級數(shù)據(jù)優(yōu)化

    mysql在查詢上千萬級數(shù)據(jù)的時候,通過索引可以解決大部分查詢優(yōu)化問題。但是在處理上億數(shù)據(jù)的時候,應(yīng)該怎么解決,本文就是用分區(qū)來優(yōu)化一下,感興趣的一起來了解一下
    2021-06-06
  • 一文讀懂MySQL?表分區(qū)

    一文讀懂MySQL?表分區(qū)

    MySQL自帶了分區(qū)功能,我們可以創(chuàng)建一個帶有分區(qū)的表,而且不需要借助任何外部工具,本文主要了介紹了MySQL表分區(qū),具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2022-03-03
  • mysql中EXISTS和IN的使用方法比較

    mysql中EXISTS和IN的使用方法比較

    這篇文章主要給大家介紹了關(guān)于mysql中EXISTS和IN使用方法比較的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MySQL中order?by的執(zhí)行過程

    MySQL中order?by的執(zhí)行過程

    這篇文章主要介紹了MySQL中order?by的執(zhí)行過程,一訂單表為例展開相應(yīng)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06

最新評論