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 連線建立時未自動發送)。
環境:Ubuntu 16.04+/18.04/20.04,apt 安裝 Emma,源碼位於 /usr/share/emma/。
sudo vim /usr/share/emma/emmalib/__init__.py
# 找到字典預設值
"db_encoding": "latin1",
# 改為
"db_encoding": "utf8",
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)
# __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
SELECT '中文測試😀';。SHOW VARIABLES LIKE 'character_set%'; 確認 character_set_client/connection/results 均為 utf8mb4。