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

Ubuntu 下 Emma 連線 MySQL 中文亂碼徹底解決方案

     編輯:MySQL 綜合教學

Emma 是基於 Python/GTK 的圖形化 MySQL 客戶端,Ubuntu apt install emma 預設編碼為 latin1,導致中文顯示亂碼。本文提供配置檔修正、臨時 SQL 緩解、源碼級永久修復三層方案。

現象

  • 查詢結果中文顯示 或亂碼。
  • 每次新連線需手動執行 SET NAMES utf8 才正常。
  • 新建連線配置檔 ~/.emma/emmarc 預設 db_encoding=latin1。

方案一:修改用戶配置檔 (快速、個人級)

vim ~/.emma/emmarc
# 找到
db_encoding=latin1
# 改為
db_encoding=utf8

重啟 Emma 生效。但仍需每次連線後手動 SET NAMES utf8 (因 Emma 連線建立時未自動發送)。

方案二:修改源碼實現連線自動 SET NAMES (永久、系統級)

環境:Ubuntu 16.04+/18.04/20.04,apt 安裝 Emma,源碼位於 /usr/share/emma/。

1. 修改預設編碼常量

sudo vim /usr/share/emma/emmalib/__init__.py
# 找到字典預設值
"db_encoding": "latin1",
# 改為
"db_encoding": "utf8",

2. 修改 MySQL 連線類,切換資料庫時自動發送 SET NAMES

sudo vim /usr/share/emma/emmalib/mysql_host.py
# 定位 _use_db 方法 (約 155 行)
def _use_db(self, name, do_query=True):
    if self.current_db and name == self.current_db.name:
        return
    if do_query:
        self.query("USE `%s`" % name, False)
        # 新增:自動設定連線字元集
        self.query("SET NAMES utf8", False)
    try:
        self.current_db = self.databases[name]
    except KeyError:
        print("Warning: used an unknown database %r!" % name)

3. 若使用 utf8mb4 (支援 Emoji),同步修改

# __init__.py
"db_encoding": "utf8mb4",

# mysql_host.py
self.query("SET NAMES utf8mb4", False)

方案三:啟動腳本包裝 (不動源碼、適合多版本共存)

cat > ~/bin/emma-utf8 <<'EOF'
#!/bin/bash
# 自動注入 SET NAMES utf8mb4 的 Emma 啟動器
exec python3 -c "
import sys
sys.path.insert(0, '/usr/share/emma')
from emmalib import main
main.main()
" "$@"
EOF
chmod +x ~/bin/emma-utf8
# 配合方案二的源碼修改,或在 Emma 介面工具列加入自定義按鈕執行 SET NAMES utf8mb4

驗證

  1. 啟動 Emma,建立新連線,測試 SELECT '中文測試😀';。
  2. SHOW VARIABLES LIKE 'character_set%'; 確認 character_set_client/connection/results 均為 utf8mb4。
  3. 關閉重開 Emma,無需手動執行 SQL 即正常顯示中文。

延伸建議

  • 資料庫、資料表、欄位、連線、應用 **五端統一 utf8mb4**,徹底杜絕亂碼。
  • Emma 專案已停止維護 (最後更新 2014),建議遷移至現代客戶端:DBeaver (跨平台免費)、MySQL Workbench (官方)、DataGrip (JetBrains 專業)、Beekeeper Studio (開源美觀)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved