vs简易计算机等于号代码,等于(=)vs.
不同算子
LIKE和=是不同的操作者。這里的大多數答案都集中在通配符支持上,這并不是這些操作符之間唯一的區別!
=是對數字和字符串進行操作的比較運算符。比較字符串時,比較運算符將整串.
LIKE比較的字符串運算符。逐字逐句.
讓事情變得更復雜的是,兩個操作符都使用了校對這對比較的結果有重要的影響。
激勵實例
讓我們首先確定一個例子,其中這些操作符產生明顯不同的結果。請允許我引用MySQL手冊:根據SQL標準,類似于在每個字符的基礎上執行匹配,因此它可以產生與=比較操作符不同的結果:
mysql> SELECT '?' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+
| '?' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0 |
+-----------------------------------------+
mysql> SELECT '?' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+
| '?' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 |
+--------------------------------------+
請注意,MySQL手冊的這一頁名為字符串比較函數,和=沒有討論,這意味著=不是嚴格意義上的字符串比較函數。
如何=工作?
這個SQL標準§8.2描述如何=比較字符串:兩個字符串的比較如下:
(A)如果X的字符長度不等于Y字符的長度,則為比較起見,將較短的字符串有效地替換為其自身的副本,該副本已通過在一個或多個PAD字符的右側級聯擴展到較長字符串的長度,其中基于CS選擇PAD字符。如果CS有no pad屬性,那么pad字符是一個與實現相關的字符,它不同于X和Y字符集中任何比CS下的任何字符串都要小的字符。否則,襯墊字符是。
(B)用比較序列CS給出了X和Y的比較結果。
c)根據排序順序的不同,即使兩個字符串的長度不同或包含不同的字符序列,它們也可以比較為相等。當操作MAX、MIN、DISTISTION、對分組列的引用以及UNION(除了)和IntersectOperator引用字符串時,這些操作從一組相同值中選擇的特定值與實現有關。
(強調后加)
這是什么意思?這意味著當比較字符串時,=運算符只是當前排序規則的一個薄包裝器。排序規則是具有比較字符串的各種規則的庫。這里有一個例子MySQL的二進制排序:static?int?my_strnncoll_binary(const?CHARSET_INFO?*cs?__attribute__((unused)),
const?uchar?*s,?size_t?slen,
const?uchar?*t,?size_t?tlen,
my_bool?t_is_prefix){
size_t?len=?MY_MIN(slen,tlen);
int?cmp=?memcmp(s,t,len);
return?cmp???cmp?:?(int)((t_is_prefix???len?:?slen)?-?tlen);}
這種特殊的排序規則碰巧是逐字節比較的(這就是為什么它被稱為“二進制”-它沒有賦予字符串任何特殊的意義)。其他排序可能提供更高級的比較。
例如,這里有一個UTF-8校對這支持不區分大小寫的比較。代碼太長,無法粘貼到這里,但請轉到該鏈接并閱讀my_strnncollsp_utf8mb4()..這種排序規則可以一次處理多個字節,并且可以應用各種轉換(例如不區分大小寫的比較)。這個=運算符是從變化無常的校對中完全抽象出來的。
如何LIKE工作?
這個SQL標準§8.5描述如何LIKE比較字符串:
M LIKE P
如果存在將M劃分為子字符串的情況,則為真:
(I)M的子串是M的0或多個連續s的序列,而M的每個都是一個子字符串的一部分。
(Ii)如果P的第一個子字符串說明符是任意字符說明符,則M的第一個子字符串是任意一個。
如果P的第一個子字符串說明符是任意的字符串說明符,那么M的第一個子字符串就是0或更多s的任意序列。
(Iv)如果P的第一個子字符串說明符既不是任意字符說明符,也不是任意字符串說明符,則根據的排序序列,M的第I子字符串等于該子字符串說明符,而不將字符附加到M中,并且與該子字符串說明符具有相同的長度。
(V)M的子串數等于P的子串說明符的個數。
(強調后加)
這句話很冗長,所以讓我們把它分解一下吧。第二項和第三項指通配符_和%分別。如果P不包含任何通配符,則只有第四項適用。這就是“任擇議定書”提出的令人感興趣的情況。
在本例中,它比較每個“子字符串”(單個字符)M中的每個子字符串P使用當前排序規則。
結論
底線是當比較字符串時,=比較整個字符串LIKE每次比較一個字符。這兩個比較都使用當前排序規則。這種差異在某些情況下會導致不同的結果,正如本文的第一個例子所證明的那樣。
你應該用哪一種?沒有人能告訴你-你需要用正確的用例。不要過早地通過切換比較操作符來優化。
總結
以上是生活随笔為你收集整理的vs简易计算机等于号代码,等于(=)vs.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《论可计算数及其在判定上的应用》简单理解
- 下一篇: 网络带宽是什么