萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 沒有 LEN() 函數?請用 LENGTH() 或 CHAR_LENGTH()

錯誤現場

SELECT id FROM bb WHERE len(欄位) > 5;
-- ERROR 1305 (42000): FUNCTION db.LEN does not exist

正確函數

函數回傳適用場景
LENGTH(str)位元組長度二進位資料、計算儲存空間
CHAR_LENGTH(str) / CHARACTER_LENGTH(str)字元數多位元組字元集(utf8mb4)下計算字數
BIT_LENGTH(str)位元長度極少用

修正範例

-- 字元數 > 5
SELECT id FROM bb WHERE CHAR_LENGTH(欄位) > 5;

-- 位元組長度 > 5
SELECT id FROM bb WHERE LENGTH(欄位) > 5;

差異實測

SET @s = '中文';
SELECT LENGTH(@s), CHAR_LENGTH(@s);
-- utf8mb4: LENGTH=6, CHAR_LENGTH=2
-- latin1:  LENGTH=2, CHAR_LENGTH=2

對照 SQL Server / Oracle

  • SQL Server:LEN()(忽略尾部空格)、DATALENGTH()
  • Oracle:LENGTH()(字元數)、LENGTHB()(位元組)
  • MySQL:無 LEN(),請用上述對應函數

總結

MySQL 用 CHAR_LENGTH() 算字數,LENGTH() 算位元組。別寫 LEN(),那是 SQL Server 的專利。

copyright © 萬盛學電腦網 all rights reserved