MySQL 函式 BIT_LENGTH() 是否是多位元組安全的?
就像 LENGTH() 函式一樣,MySQL BIT_LENGTH() 函式不是多位元組安全的函式。正如我們所知,對於 Unicode 來說,多位元組安全函式(例如 CHAR_LENGTH() 或 CHARACTER_LENGTH())和 BIT_LENGTH() 函式之間的結果差異特別明顯,其中大多數字符使用兩個位元組編碼或對於位元組數不同的 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)
Advertisement