首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 判斷字串長度是否超過 MySQL VARCHAR 限制:iconv_strlen 正確用法

     編輯:PHP 綜合知識

問題背景

MySQL VARCHAR(n) 長度單位為「字符」,非位元組。UTF-8 編碼下,一個漢字佔 3 位元組,但算 1 個字符。PHP strlen() 返回位元組數,導致誤判。

錯誤示範

<?php
$str = "你好啊!!"; // 5 個字符
echo strlen($str); // 輸出 11 (3*3 + 2*1),誤以為超過 VARCHAR(10)
?>

正確解法:iconv_strlen()

<?php
$str = "你好啊!!";
echo iconv_strlen($str, 'UTF-8'); // 輸出 5,正確

// 判斷是否超過 VARCHAR(10)
$maxLen = 10;
if (iconv_strlen($str, 'UTF-8') > $maxLen) {
    echo "超過長度限制";
} else {
    echo "長度合法";
}
?>

關鍵參數:字符集

第二參數必須指定當前字符集('UTF-8'、'GB2312'、'BIG-5' 等),函數會按該編碼規則計算字符數。GB2312 下漢字佔 2 位元組,但 iconv_strlen 仍返回字符數(1)。

替代方案:mb_strlen()

<?php
// 需啟用 mbstring 擴展
echo mb_strlen($str, 'UTF-8'); // 同樣輸出 5

// 設定預設編碼,後續可省略第二參數
mb_internal_encoding('UTF-8');
echo mb_strlen($str); // 5
?>

最佳實踐建議

  • 專案統一使用 UTF-8,資料庫、PHP、HTML、連線字符集全鏈路一致。
  • 封裝通用函數 char_len($str) 內部調用 mb_strlen 或 iconv_strlen,業務代碼統一調用。
  • 前端 JS 同步驗證(str.length 即字符數),減少後端壓力。
  • 資料庫層面仍建議設定合理長度,作為最後防線。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved