mysql建立索引,如果是BLOB和TEXT型別,必須指定length,為啥啊?這個length有什麼作用

時間 2021-08-11 17:12:02

1樓:月滿西樓彡

有4種text型別:tinytext、text、mediumtext和longtext。這些對應4種blob型別,有相同的最大長度和儲存需求。

blob 列被視為二進位制字串(位元組字串)。text列被視為非二進位制字串(字元字串)。blob列沒有字符集,並且排序和比較基於列值位元組的數值值。

text列有一個字符集,並且根據字符集的 校對規則對值進行排序和比較。

在text或blob列的儲存或檢索過程中,不存在大小寫轉換。

當未執行在嚴格模式時,如果你為blob或text列分配一個超過該列型別的最大長度的值值,值被擷取以保證適合。如果截掉的字元不是空格,將會產生一條警告。使用嚴格sql模式,會產生錯誤,並且值將被拒絕而不是擷取並給出警告。

參見5.3.2節,「sql伺服器模式」。

在大多數方面,可以將blob列視為能夠足夠大的varbinary列。同樣,可以將text列視為varchar列。blob和text在以下幾個方面不同於varbinary和varchar:

· 當儲存或檢索blob和text列的值時不刪除尾部空格。(這與varbinary和varchar列相同)。

請注意比較時將用空格對text進行擴充以適合比較的物件,正如char和varchar。

· 對於blob和text列的索引,必須指定索引字首的長度。對於char和varchar,字首長度是可選的。參見7.4.3節,「列索引」。

· blob和text列不能有 預設值。

long和long varchar對應mediumtext資料型別。這是為了保證相容性。如果text列型別使用binary屬性,將為列分配列字符集的二元 校對規則。

mysql連線程式/odbc將blob值定義為longvarbinary,將text值定義為longvarchar。

由於blob和text值可能會非常長,使用它們時可能遇到一些約束:

· 當排序時只使用該列的前max_sort_length個位元組。max_sort_length的 預設值是1024;該值可以在啟動mysqld伺服器時使用--max_sort_length選項進行更改。參見5.

3.3節,「伺服器系統變數」。

執行時增加max_sort_length的值可以在排序或組合時使更多的位元組有意義。任何客戶端可以更改其會話max_sort_length變數的值:

mysql> set max_sort_length = 2000;

mysql> select id, comment from tbl_name

-> order by comment;

當你想要使超過max_sort_length的位元組有意義,對含長值的blob或text列使用group by或order by的另一種方式是將列值轉換為固定長度的物件。標準方法是使用substring函式。例如,下面的語句對comment列的2000個位元組進行排序:

mysql> select id, substring(comment,1,2000) from tbl_name

-> order by substring(comment,1,2000);

· blob或text物件的最大大小由其型別確定,但在客戶端和伺服器之間實際可以傳遞的最大值由可用記憶體數量和通訊快取區大小確定。你可以通過更改max_allowed_packet變數的值更改訊息快取區的大小,但必須同時修改伺服器和客戶端程式。例如,可以使用 mysql和mysqldump來更改客戶端的max_allowed_packet值。

參見7.5.2節,「調節伺服器引數」、8.

3節,「mysql:mysql命令列工具」和8.8節,「mysqldump:

資料庫備份程式」。

每個blob或text值分別由內部分配的物件表示。這與其它列型別形成對比,後者是當開啟表時為每1列分配儲存引擎。

2樓:學四雞腿

因為blob和text型別欄位較大,資料庫不支援該型別欄位的整體索引,只支援部分索引,length是為了指定當前欄位在指定長度length範圍內索引有效,超出該長度範圍索引無效

mysql資料庫怎麼建立索引,在mysql資料庫中為欄位新增索引,是什麼意思,有什麼好處,謝謝!!

普通索引 新增index alter table table name add index index name column 下面演示下給user表的name欄位新增一個索引 mysql資料庫如何建立索引 mysql資料庫如何建立索引 主鍵索引 新增primary key alter table ...

如何建立mysql索引以及索引的優缺點

先正面你的問題。資料是否重複不是建立索引的重要依據,甚至都不是依據。只要不完全重複 所有元組的該元素都一樣 那麼建立索引就是有意義的。即使當前資料完全重複,也不是不能建立索引,這種情況有點複雜,不細說了。對於你後面的疑問,可以給你一個如何建立索引的忠告,如何查就如何建 索引的建立,唯一的原因就是為了...

怎麼用mysql建立索引的時候報innodb present

mysql 5.6.4裡才新增了innodb引擎的fulltext索引 不能升級mysql版本的話 推薦用lucene elasticsearch比較容易部署 或sphinx這樣的第三方解決方案。如果這個表更新不頻繁,查詢量不大,又趕時間,可以用觸發器 定時任務或者其他類似的dba技巧建立支援全文索...