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

MySQL 編碼設置全鏈路指南:phpMyAdmin 建庫建表建字段三級統一、連接層 SET NAMES、避坑清單

     編輯:MySQL 綜合教學

phpMyAdmin 三級統一操作

  1. 建庫:字符集選 utf8mb4_general_ci(或 utf8mb4_unicode_ci)
  2. 建表:存儲引擎 InnoDB,字符集同庫
  3. 建字段:字符型列(varchar/text)同表字符集,整理規則同庫

建庫字符集選擇 建表字符集選擇 建字段字符集選擇

已有庫表修改命令

-- 庫級
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

-- 表級(含列級聯轉換)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 僅修改表默認,不轉換現有列
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

應用連接層強制編碼

-- PHP (mysql_* 已棄用,示例用 mysqli/PDO)
$mysqli->set_charset('utf8mb4');
$pdo = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4', 'u', 'p');

-- Java
jdbc:mysql://host:3306/db?characterEncoding=utf8mb4&useSSL=false

-- Python
conn = pymysql.connect(charset='utf8mb4')

-- Go
dsn := "user:pass@tcp(host:3306)/db?charset=utf8mb4&parseTime=True&loc=Local"

避坑清單

現象根因修正
存入正常,查出亂碼連接層未 SET NAMES連接建立後立即執行 SET NAMES utf8mb4
Emoji 存入變 ??字符集為 utf8 (utf8mb3)全鏈路升級 utf8mb4
phpMyAdmin 顯示正常,應用亂碼應用連接字符集錯誤檢查驅動版本、連接參數
Latin1 歷史庫遷移雙重編碼 (Latin1→UTF8→Latin1)ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 一步到位

驗證命令

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
SHOW CREATE TABLE tbl_name\G

編碼問題 90% 發生在連接層。建立連接後第一條語句必須是 SET NAMES utf8mb4(或驅動原生 charset 參數),將其封裝在連接池初始化/中間件中,杜絕手動調用遺漏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved