在 Ubuntu 上使用 sqladmin(通常指 phpMyAdmin / SQL 管理工具,或某个 SQL Admin 客户端)出现乱码,一般是字符集(编码)不一致导致的。下面按常见原因和解决方法说明。
如果数据库或表使用的是 latin1,而页面用 UTF-8 显示,就会乱码。
检查:
SHOW CREATE DATABASE your_db;
SHOW CREATE TABLE your_table;
解决:
ALTER DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
即使数据库是 UTF-8,连接没设置也会乱码。
在 SQL 中执行:
SET NAMES utf8mb4;
或在连接代码里(如 PHP):
$conn->set_charset("utf8mb4");
浏览器或工具本身用了错误编码。
解决:
// config.inc.php
$cfg['DefaultCharset'] = 'utf8mb4';
locale
如果不是 UTF-8:
sudo apt install locales
sudo dpkg-reconfigure locales
# 选择 en_US.UTF-8 或 zh_CN.UTF-8
编辑:
sudo nano /etc/mysql/my.cnf
# 或
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
加入:
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
重启:
sudo systemctl restart mysql
如果数据写入时就已经乱码,通常无法完美恢复。
如果是显示乱码但数据正确,按上面方法改编码即可。
如果你能告诉我:
我可以给你更精准的一步到位方案。