binary
binary操作符將后面的字符串拋給一個二進制字符串。這是一種簡單的方式來促使逐字節而不是逐字符的進行列比較。這使得比較區分大小寫,即使該列不被定義為?binary或?BLOB。binary也會產生結尾空白,從而更加顯眼。
mysql>?SELECT?'a'?=?'A'; ->?1 mysql>?SELECT?binary?'a'?=?'A'; ->?0 mysql>?SELECT?'a'?=?'a?'; ->?1 mysql>?SELECT?binary?'a'?=?'a?'; ->?0
binary影響整個比較;它可以在任何操作數前被給定,而產生相同的結果。
binary?str?是CAST(str?AS binary)的縮略形式。
注意,在一些語境中,假如你將一個編入索引的列派給binary,?MySQL?將不能有效使用這個索引。
假如你想要將一個?BLOB值或其它二進制字符串進行區分大小寫的比較,你可利用二進制字符串沒有字符集這一事實實現這個目的,這樣就不會有文書夾的概念。為執行一個區分大小寫的比較,可使用? CONVERT()函數將一個字符串值轉化為一個不區分大小寫的字符集。其結果為一個非二進制字符串,因此?LIKE?操作也不會區分大小寫:
SELECT?'A'?LIKE?CONVERT(blob_col?USING?latin1)?FROM?tbl_name;
若要使用一個不同的字符集,?替換其在上述語句中的latin1名。
CONVERT()一般可用于比較出現在不同字符集中的字符串。
CAST(expr?AS?type),?CONVERT(expr,type)?,?CONVERT(expr?USING?transcoding_name)
CAST()?和CONVERT()?函數可用來獲取一個類型的值,并產生另一個類型的值。
這個類型?可以是以下值其中的 一個:
binary[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
binary?產生一個二進制字符串。關于它怎樣影響比較結果的說明見本章中?binary操作符項。
假如給定了隨意長度N,則?binary[N]?使?cast使用該參數的不多于?N?個字節。同樣的,?CHAR[N]會使?cast?使用該參數的不多于N?個字符。
CAST() and CONVERT(… USING …)?是標準?SQL語法。CONVERT()的非USING?格式是ofis ODBC語法。
帶有USING的CONVERT()?被用來在不同的字符集之間轉化數據。在?MySQL中,?自動譯碼名和相應的字符集名稱相同。例如。 這個語句將服務器的默認字符集中的字符串?‘abc’轉化為utf8字符集中相應的字符串:
SELECT?CONVERT('abc'?USING?utf8);
當你想要在一個CREATE … SELECT?語句中創建一個特殊類型的列,則cast函數會很有用:
CREATE?TABLE?new_table?SELECT?CAST('2000-01-01'?AS?DATE);
該函數也用于ENUM?列按詞法順序的排序。通常ENUM列的排序在使用內部數值時發生。將這些值按照詞法順序派給CHAR?結果:
SELECT?enum_col?FROM?tbl_name?ORDER?BY?CAST(enum_col?AS?CHAR);
CAST(str?AS binary)和binary?str相同。?CAST(expr?AS CHAR)?將表達式視為一個帶有默認字符集的字符串。
若用于一個諸如?CONCAT(‘Date: ‘,CAST(NOW() AS DATE))這樣的比較復雜的表達式的一部分,CAST()也會改變結果。
你不應在不同的格式中使用?CAST()?來析取數據,但可以使用諸如LEFT()?或?EXTRACT()?的樣的字符串函數來代替。請參見“日期和時間函數”。
若要在數值語境中將一個字符串派給一個數值,?通常情況下,除了將字符串值作為數字使用外,你不需要做任何事:
mysql>?SELECT?1+'1'; ->?2
若要在一個字符串語境中使用一個數字,該數字會被自動轉化為一個binary?字符串。
mysql>?SELECT?CONCAT('hello?you?',2); ->?'hello?you?2'
MySQL?支持帶符號和無符號的64比特值的運算。若你正在使用數字操作符? (如?+)?而其中一個操作數為無符號整數,則結果為無符號。可使用SIGNED?和UNSIGNED cast?操作符來覆蓋它。將運算分別派給帶符號或無符號64比特整數。
mysql>?SELECT?CAST(1-2?AS?UNSIGNED) ->?18446744073709551615 mysql>?SELECT?CAST(CAST(1-2?AS?UNSIGNED)?AS?SIGNED); ->?-1
注意,假如任意一個操作數為一個浮點值,則結果為一個浮點值, 且不會受到上述規則影響?(關于這一點, DECIMAL?列值被視為浮點值)。
mysql>?SELECT?CAST(1?AS?UNSIGNED)?-?2.0; ->?-1.0
若你在一個算術運算中使用了一個字符串,它會被轉化為一個浮點數。