多語言網站:**同一內容、多種語言、同一域名/入口、無縫切換**。核心挑戰:架構選型、動態數據多語言存儲、字符集統一。本文系統拆解三大戰場。
數據庫中涉語言文本(商品名、文章、評論等)如何存?
| 方案 | 粒度 | 實現方式 | 優點 | 缺點 | 適用場景 | |------|------|----------|------|------|----------| | **庫級** | Database | 每語言獨立 DB | 物理隔離極致、權限清晰 | 空間浪費極大(非文本表全量複製)、跨庫查詢/事務極痛、擴展語言 = 新建 DB + 同步 Schema | 極少見,僅極少數超大型跨國獨立運營實體 | | **表級** | Table | 每語言獨立表(`product_en`, `product_zh`) | 共用 DB 連接池、非文本表共享、新增語言 = 建新表、維護相對簡單 | 共享字段(庫存、價格、SKU)同步麻煩、跨語言 JOIN 複雜 | **最推薦**:中大型電商、CMS、多語言內容平台 | | **字段級** | Column | 同表多語言字段(`title_en`, `title_zh`) | 單表查詢、無同步問題 | **擴展語言需 ALTER TABLE 加鎖、鎖表風險大、Schema 膨脹、查詢 SELECT * 暴雷** | 僅適合語言數**永久固定 ≤ 3** 的極簡項目 |將**所有語言共享字段**(SKU、庫存、價格、重量、編碼、圖片 URL)抽離至**共享基礎表**(`product_base`),各語言表僅存**語言相關字段**(`title`, `description`, `slug`, `seo_meta`)。
查詢時 `JOIN base + lang_table` —— **維護簡單、擴展零風險、查詢高效、空間最優**。
**痛點**:GB2312/Big5/Shift_JIS/EUC-KR 等單一字符集無法同時展示多語言,用戶瀏覽非本地語言頁面必現亂碼。
**解法**:**全站強制 UTF-8**——雙字節編碼,覆蓋 65,536+ 字符,涵蓋全球通用語言。
警告:專案中途改字符集 = 重寫所有文本內容。**Day 1 定調 UTF-8,一輩子不後悔。**
舊 ASP/VBScript/PHP 系統涉及內碼轉換(GB2312/Big5 ↔ Unicode),依賴 `CodePage`:
• `codepage=936` 簡中 GBK
• `codepage=950` 繁中 Big5
• `codepage=65001` UTF-8
**現代化路徑**:棄用 CodePage 機制,全鏈路 UTF-8,資料庫一次性 `iconv`/`mb_convert_encoding` 清洗遷移,徹底斷舊根。
在項目啟動前確定架構模式、數據模型、字符集策略,**將多語言能力內化為系統基因**,而非上線前兩周臨時加的「語言包」。這才是面向全球用戶的專業工程態度。