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

MySQL 字符集亂碼問題:set names utf8 / gb2312 快速修正指南

     編輯:MySQL 綜合教學

現象

連線進 MySQL,SELECT * FROM my_table 顯示亂碼(、???、ber 等),資料實際儲存正確,僅是客戶端與伺服器字符集不一致。

快速修正(臨時,當前會話生效)

SET character_set_client = charset;
SET character_set_connection = charset;
SET character_set_results = charset;
  • client:客戶端發送 SQL 的編碼
  • connection:伺服器解析 SQL 的編碼
  • results:伺服器回傳結果的編碼

永久生效配置

修改 my.cnf / my.ini

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (c VARCHAR(100)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

常見坑點速查

現象原因對策
存入「😀」變 ??utf8 只支援 3 字節,emoji 需 4 字節全鏈路用 utf8mb4
SET NAMES utf8 後仍亂碼表/欄位定義是 latin1/gbk,資料已錯誤編碼入庫ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 重建
JDBC 連線亂碼連線字串未指定 characterEncodingjdbc:mysql://host/db?characterEncoding=utf8&useSSL=false
Python pymysql 亂碼未傳 charset 參數pymysql.connect(charset='utf8mb4')

驗證字符集鏈路完整性

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