字符集:羅列所有圖形字符的一張大表。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、同德網(wǎng)站維護(hù)、網(wǎng)站推廣。
排序規(guī)則:定義各個圖形字符之間的大小比較規(guī)則,比如:是否區(qū)分大小寫,區(qū)分全角和半角等。在軟件使用中,一般我們只指定字符編碼即可,因為確定了字符編碼字符集自然就確定了。但是在數(shù)據(jù)庫類軟件中,我們除了要指定編碼規(guī)則,還需要指定排序規(guī)則,因為,數(shù)據(jù)庫是要提供模糊匹配、排序顯示功能的。sql可以查看mysql支持的字符集編碼和排序規(guī)則,其中每個字符集編碼都有一個默認(rèn)的排序規(guī)則。
由于歷史原因,MySQL剛開始設(shè)計的時候,"天真的"認(rèn)為使用3個字節(jié)就足夠存儲字符串了,因此將UTF-8進(jìn)行閹割;然而遇到復(fù)雜的漢字或者emoji表情等4字節(jié)的寬字符的時候,存儲就會出現(xiàn)異常,因此在版本5.7.3開始引入utf8mb4,其表示為most bytes 4,即最多占用4個字節(jié)。
utf8mb4_unicode_ci是基于官方的Unicode規(guī)則進(jìn)行排序和壓縮,其算法相對負(fù)責(zé),對于大部分的語言和字符集排序有著很高的準(zhǔn)確率;而uft8mb4_general_ci可以理解為一種為了提升速度的簡化版Unicode規(guī)則,但由于它不完全遵循Unicode規(guī)則,在使用某種特定語言或者字符集時,會出現(xiàn)非預(yù)期的結(jié)果。
例:
總結(jié):
UTF-8編碼的字符可以是1-4個字節(jié),但是在MySQL中最大只能存儲3個字節(jié)。
在版本5.5開始引入innodb_large_prefix,其默認(rèn)值為off,索引的前綴最大限制為767個字節(jié);若值為on時(版本5.7.7開始作為默認(rèn)值),最大限制為3072個字節(jié)。
總結(jié):
在后期版本 innodb_large_prefix 將會被逐漸廢棄并移除。從版本8.0開始,索引長度限制由表字段(row format)決定,若為DYNAMIC或COMPRESSED時,限制值為3072;為REDUNDANT或COMPACT時,限制值為767。且row_format=dynamic時,長度3072是基于innodb_page_size=16KB,隨著innodb_page_size的值按比例增減,其索引前綴長度也響應(yīng)減小,如若為8KB時,長度為1536,因此在限制索引長度時,需根據(jù)使用的MySQL版本以及相應(yīng)的參數(shù)進(jìn)行配置決定。
那要看你的表是怎么構(gòu)建的
一般這匯總情況我認(rèn)為
你的id應(yīng)該是自增的吧
如果是自增
那么
插入一個數(shù)據(jù)的話
就是id等于4的那個行
切
你的
desc字段應(yīng)該就是
用來
排序用的吧
那么
在前臺
你可以
做一個input框(每行后邊都有個input框)
目的就是為了
排序你的數(shù)據(jù)
在這種情況下
就不需要改動什么字段了吧
唯一需要改動的字段內(nèi)容
就是
更新
desc的字段就可以了吧
打個比方
原來是這樣的
id
name
desc
1
a
2
c
3(改動)
3
b
2(改動)
4
d
1(追加在a后)
修改后
按
name
a
b
c
d
這么排列
id
name
desc
1
a
3
b
1
2
c
2
4
d
3
這是在前臺顯示的內(nèi)容
在數(shù)據(jù)庫里
你可以看到實際上
改變的
只有
desc
后邊的
1
2
3
這幾個
而數(shù)據(jù)庫的表中
實際數(shù)據(jù)的位置是不會發(fā)生變化
其實你不用擔(dān)心什么數(shù)據(jù)量過多的問題
且
在插入新的數(shù)據(jù)的時候
就讓他的desc值默認(rèn)是最大的
也就是最后一位顯示
標(biāo)準(zhǔn)的UTF-8 字符集編碼,是可以用 1~4 個字節(jié)去編碼21位字符,是一種變長的編碼格式,這幾乎包含了是世界上所有能看見的語言了。
然而在MySQL里實現(xiàn)的utf8最長使用3個字節(jié),節(jié)省空間但不能表達(dá)全部的UTF-8,只支持到了 Unicode 中的“基本多文種平面”(U+0000至U+FFFF,Basic Multilingual Plane,BMP),但并不是所有?,F(xiàn)在手機端常用的表情字符 emoji和一些不常用的漢字需要四個字節(jié)才能編碼出來。
MySQL在 5.5.3 之后增加了 utf8mb4 字符編碼,mb4即 most bytes 4,使用4個字節(jié)來表示完整的UTF-8,是utf8 的超集并完全兼容utf8,能夠用4個字節(jié)存儲更多的字符。
utf8mb4_bin: 將字符串每個字符用二進(jìn)制數(shù)據(jù)編譯存儲,區(qū)分大小寫,而且可以存二進(jìn)制的內(nèi)容。
utf8mb4_general_ci :不區(qū)分大小寫,不支持?jǐn)U展,它僅能夠在字符之間進(jìn)行逐個比較,沒有實現(xiàn)Unicode排序規(guī)則,在遇到某些特殊語言或者字符集,排序結(jié)果可能不一致。但是,在絕大多數(shù)情況下,這些特殊字符的順序并不需要那么精確。
utf8mb4_unicode_ci :是基于標(biāo)準(zhǔn)的unicode來排序和比較,能夠在各種語言之間精確排序,unicode排序規(guī)則為了能夠處理特殊字符的情況,實現(xiàn)了略微復(fù)雜的排序算法。
_bin : binary case sensitive collation,區(qū)分大小寫的
_cs : case sensitive collation,區(qū)分大小寫
_ci : case insensitive collation,不區(qū)分大小寫
主要從排序準(zhǔn)確性和性能兩方面看:
參考鏈接: