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

MySQL 插入中文亂碼徹底解決:5 種方法與字符集最佳實踐

     編輯:MySQL 綜合教學

MySQL 插入中文亂碼徹底解決:5 種方法與字符集最佳實踐

中文亂碼是 MySQL 開發者最常遇到的坑。本文提供 5 種解決方案,從臨時指定到永久配置,並總結字符集變數含義,助你建立統一 UTF-8 環境,徹底告別亂碼。

方法一:客戶端臨時設定 SET NAMES latin1

mysql> SET NAMES latin1;
mysql> SOURCE test.sql;

適用於匯入舊版 latin1 編碼的 SQL 檔案。

方法二:SQL 檔案內嵌指定

-- test.sql 開頭加入
SET NAMES latin1;
INSERT ...

再執行 SOURCE test.sql; 或命令列導入。

方法三:命令列導入時指定

mysql -uroot -p123456 test < test.sql
-- 前提:test.sql 內已有 SET NAMES latin1;

方法四:客戶端連線參數指定字符集

mysql -uroot -p123456 --default-character-set=latin1 test < test.sql

SQL 檔本身無需包含 SET NAMES。

方法五:修改配置檔永久生效(強烈推薦,建議全環境 UTF-8)

[client]
default-character-set=utf8

[server]          # MySQL 5.1 以前
default-character-set=utf8

[mysqld]          # MySQL 5.5+
character-set-server=utf8
collation-server=utf8_general_ci

修改後無需重啟,重新登入即可生效。

庫、表、程式三統一

CREATE DATABASE wyb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 程式連線亦需指定 charset=utf8(JDBC、PDO、mysqli 等)

核心字符集變數對照表

查看當前:SHOW VARIABLES LIKE 'character_set%';

避坑關鍵

  1. 全鏈路 UTF-8:資料庫、表、欄位、連線、程式、HTML 頁面(<meta charset="utf-8">)
  2. 避免使用 utf8mb3 別名,直接用 utf8 或 utf8mb4(支援 Emoji)
  3. 舊資料已為 latin1 時,匯入前用方法一~四指定 latin1,匯入後再 ALTER TABLE ... CONVERT TO CHARACTER SET utf8

來源:crazy_sir 博客整理

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
變數含義建議值
character_set_client客戶端發送語句的編碼utf8
character_set_connection連線層轉換編碼utf8
character_set_database預設資料庫編碼utf8
character_set_results返回結果集編碼utf8
character_set_server服務端預設編碼utf8