MySQL使用TEXT/BLOB類型的知識(shí)點(diǎn)詳解
一、TEXT和BLOB的區(qū)別
TEXT和BLOB家族之間僅有的不同是BLOB類型存儲(chǔ)的是二進(jìn)制數(shù)據(jù),沒(méi)有排序規(guī)則或字符集,而TEXT類型有字符集或排序規(guī)則。說(shuō)白了如果要儲(chǔ)存中文則選擇TEXT。
二、默認(rèn)值問(wèn)題
Strict Mode下不能設(shè)置默認(rèn)值,否則會(huì)報(bào)can't have a default value錯(cuò):
mysql> create table `test`.`text_blob`( -> `a_text` text DEFAULT ' ' , -> `b_blob` blob -> ); ERROR 1101 (42000): BLOB/TEXT column 'a_text' can't have a default value
原因:http://www.dhdzp.com/article/181667.htm
select @@sql_mode;//查看模式
trict Mode下有以下限制:
1).不支持對(duì)not null字段插入null值
2).不支持對(duì)自增長(zhǎng)字段插入”值,可插入null值
3).不支持 text 字段有默認(rèn)值
三、排序
MySQL對(duì)TEXT和BLOB列進(jìn)行排序與其他類型不同:只對(duì)每個(gè)列的最前max_sort_length字節(jié)而不是整個(gè)字符串排序。
默認(rèn)是1024,可以通過(guò)配置文件修改。
mysql> SHOW VARIABLES LIKE 'max_sort_length'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_sort_length | 1024 | +-----------------+-------+ 1 row in set (0.00 sec)
四、創(chuàng)建前綴索引
通常最好設(shè)置開(kāi)始的部分字符作為索引,這樣可以大大節(jié)約索引空間,從而提高索引效率。
alter table table1 add key (text1(1024));
知識(shí)點(diǎn)擴(kuò)展:
MySQL字段設(shè)計(jì)規(guī)范避免使用TEXT/BLOB數(shù)據(jù)類型
一、說(shuō)明
假期有時(shí)間可以多去看看一些表的設(shè)計(jì),發(fā)現(xiàn)了不少問(wèn)題,老系統(tǒng)上過(guò)百的字段,里面含有大量的mediumtext,不到500萬(wàn)的數(shù)據(jù)量,開(kāi)發(fā)規(guī)范中有要求表設(shè)計(jì)不要超過(guò)500萬(wàn)數(shù)據(jù)量。查看了表占用的磁盤空間120G,毫無(wú)疑問(wèn)是大表,當(dāng)初設(shè)計(jì)的時(shí)候就沒(méi)有考慮過(guò)設(shè)計(jì)。一句話上線能用就行,管他呢。
二、MySQL規(guī)范
1、單表不要超過(guò)500萬(wàn)條記錄,同時(shí)評(píng)估單表所占用磁盤空間不要超過(guò)50G,否則考慮優(yōu)化、分表等。
2、禁用text字段類型,如果必須的用,也需要單獨(dú)設(shè)計(jì)表。
三、禁用text字段類型原因
1、性能很差,排序等操作時(shí),就不能使用內(nèi)存臨時(shí)表,必須使用磁盤臨時(shí)表進(jìn)行。
2、TEXT或BLOB類型只能使用前綴索引,MySQL對(duì)索引字段長(zhǎng)度是有限制的。
四、解決辦法
定好規(guī)范,嚴(yán)格執(zhí)行(執(zhí)行很難),一兩個(gè)DBA面對(duì)幾十上百的業(yè)務(wù)系統(tǒng),幾萬(wàn)個(gè)表,上百萬(wàn)的字段通過(guò)每一個(gè)表和字段人工審核是不可能完成的,最終還是要靠智能化的審核系統(tǒng)!
到此這篇關(guān)于MySQL使用TEXT/BLOB類型的知識(shí)點(diǎn)詳解的文章就介紹到這了,更多相關(guān)MySQL使用TEXT/BLOB類型的幾點(diǎn)注意內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決MySQL Sending data導(dǎo)致查詢很慢問(wèn)題的方法與思路
這篇文章主要介紹了解決MySQL Sending data導(dǎo)致查詢很慢問(wèn)題的方法與思路,感興趣的小伙伴們可以參考一下2016-04-04
MySQL表字段設(shè)置默認(rèn)值(圖文教程及注意細(xì)節(jié))
默認(rèn)值的設(shè)置很重要,比如在插入的時(shí)候一些字段是可以省略的,這會(huì)帶來(lái)很多的方便,接下來(lái)將要介紹MySQL表字段設(shè)置默認(rèn)值感興趣的你可以千萬(wàn)不要走開(kāi)啊,希望本文對(duì)你有所幫助2013-01-01
MySQL連接無(wú)法解析HOST主機(jī)名的解決方法
這篇文章主要介紹了MySQL連接無(wú)法解析HOST主機(jī)名的解決方法,需要的朋友可以參考下2014-02-02
MySQL?5.5,?5.6,?5.7,?8.0?特性對(duì)比
MySQL是一個(gè)廣泛使用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),你知道各個(gè)版本之前的區(qū)別嗎,本文主要介紹了MySQL?5.5,?5.6,?5.7,?8.0?特性對(duì)比,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
MySQL時(shí)間戳與日期格式的相互轉(zhuǎn)換
在MySQL數(shù)據(jù)庫(kù)中,時(shí)間戳和日期格式是常用的數(shù)據(jù)類型,在MySQL中,我們可以使用函數(shù)還相互轉(zhuǎn)換時(shí)間戳和日期格式,下面我將詳細(xì)的給大家介紹如何進(jìn)行轉(zhuǎn)換,并提供相應(yīng)的代碼示例,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-01-01
MySQL的MRR(Multi-Range Read)優(yōu)化原理解析
MRR優(yōu)化是MySQL中一種重要的查詢優(yōu)化技術(shù),它通過(guò)減少磁盤I/O的隨機(jī)性和提高緩存效率,顯著提升了查詢性能,這篇文章主要介紹了MySQL的MRR(Multi-Range Read)優(yōu)化原理詳解,需要的朋友可以參考下2024-08-08

