MySQL BIT_LENGTH() 函式是否安全多位元組?
就像 LENGTH() 函式一樣,MySQL BIT_LENGTH() 函式不是一個安全的多位元組函式。眾所周知,多位元組安全函式(例如 CHAR_LENGTH() 或 CHARACTER_LENGTH())與 BIT_LENGTH() 函式的結果差異尤其適用於 Unicode(其中大多數字符以兩個位元組編碼)或 UTF-8(位元組數有所不同)。它在以下示例中得到演示 -
示例
mysql> Select BIT_LENGTH('tutorialspoint'); +------------------------------+ | BIT_LENGTH('tutorialspoint') | +------------------------------+ | 112 | +------------------------------+ 1 row in set (0.00 sec)
以上結果集顯示字串 'tutorialspoint' 的位長度為 112,因為它尚未轉換為 Unicode 字元。以下查詢將它轉換為 Unicode 字元 -
mysql> SET @A = CONVERT('tutorialspoint' USING ucs2); Query OK, 0 rows affected (0.02 sec)
將字串轉換為 Unicode 後,它給出結果 224 而不是 112,因為在 Unicode 中單個字元佔用 2 個位元組,如下所示 -
mysql> Select BIT_LENGTH(@A); +----------------+ | BIT_LENGTH(@A) | +----------------+ | 224 | +----------------+ 1 row in set (0.00 sec)
廣告