| 變量 | 含義 |
| character_set_server | 服務端默認字符集 |
| character_set_database | 當前庫字符集 |
| character_set_client | 客戶端發送數據編碼 |
| character_set_connection | 連接層轉換編碼 |
| character_set_results | 結果集返回編碼 |
| collation_server / _database / _connection | 對應排序規則 |
二、會話級臨時修改(斷開失效)
SET NAMES utf8mb4; -- 一鍵設置 client/connection/results
-- 或單獨設置
SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;
SET collation_connection = utf8mb4_general_ci;
注意: SET character_set_server = utf8mb4 無效,服務端字符集只能通過配置文件修改並重啟生效。
三、持久化修改(配置文件 + 重啟)
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[client]
default-character-set = utf8mb4
修改後:systemctl restart mysqld 或 service mysql restart。
四、JDBC 連接串指定編碼
jdbc:mysql://192.168.0.5:3306/test?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
五、Root 密碼重置(三種方法)
方法 1:mysqladmin(已知舊密碼)
mysqladmin -u root -p'oldpass' password 'newpass'
方法 2:SQL 更新 user 表(需登入權限)
mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
mysql> FLUSH PRIVILEGES;
MySQL 5.7+ 欄位為 authentication_string,5.6 為 password。
方法 3:跳過授權表(忘記密碼/權限損壞)
# 1. 停止服務
systemctl stop mysqld
# 2. 啟動跳過授權
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 免密登入修改
mysql -u root mysql
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
# 4. 正常重啟
systemctl restart mysqld
MySQL 8.0+ 注意: PASSWORD() 已移除,改用:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
- 上一篇文章: MySQL 5 字符集編碼亂碼終極解決方案:從 my.cnf 到 JDBC 全鏈路統一
- 下一篇文章: SQL 語句優化 Hint 大全:30 個 Oracle/MySQL 優化器指令實戰解析
Copyright ©
程式碼之家 All Rights Reserved