查看數據庫創建信息:
mysql> show create database oldboydb;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| oldboydb | CREATE DATABASE `oldboydb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
查看MySQL初始化信息:
mysql> \s
--------------
mysql Ver 14.14 Distrib 5.6.44, for Win64 (x86_64)
Connection id: 1
Current database:
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.6.44 MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1 # 服務端編碼
Db characterset: latin1 # 數據庫默認編碼
Client characterset: gbk # 現在用的客戶端編碼
Conn. characterset: gbk # 雙方連接的編碼
TCP port: 3306
Uptime: 3 hours 29 min 43 sec
Threads: 1 Questions: 8 Slow queries: 0 Opens: 67 Flush tables: 1 Open tabl
es: 60 Queries per second avg: 0.000
--------------
查看MySQL(服務端/客戶端/數據庫)編碼:
mysql> show variables like '%char%';
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | G:\mysql\mysql-5.6.44-winx64\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set (0.00 sec)
出現亂碼的原因: 客戶端MySQL的字符集和服務端的字符集不一樣.
character_set_client / character_set_connection 和 character_set_results被稱為客戶端編碼.
插入數據前,先執行修改編碼的指令: set names latin1;
mysql> set names latin1; (臨時生效)
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | G:\mysql\mysql-5.6.44-winx64\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set (0.00 sec)
------------------------------------------------------------------永久修改編碼------------------------------------------------------------------
查看mysql啟動時加載my.ini的順序:
C:\Users\Administrator>mysql --help | findstr my.ini
C:\windows\my.ini C:\windows\my.cnf C:\my.ini C:\my.cnf G:\mysql\mysql-5.6.44-wi
nx64\my.ini G:\mysql\mysql-5.6.44-winx64\my.cnf
查看端口:
C:\Users\Administrator>netstat -ano | findstr "3306"
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 1800
TCP [::]:3306 [::]:0 LISTENING 1800
進入G:\mysql\mysql-5.6.44-winx64,copy一份my-default.ini文件,改名為my.ini文件,如果是linux環境,文件名為my.cnf,使用Notepad++打開,my.ini內容:
[mysql]
user=root
password=666
重啟mysql服務
C:\Users\Administrator>net stop mysqld
mysqld 服務正在停止.
mysqld 服務已成功停止。
C:\Users\Administrator>net start mysqld
mysqld 服務正在啟動 .
mysqld 服務已經啟動成功。
C:\Users\Administrator>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user(); # 查看當前登錄的用戶
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboydb |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql>
my.ini文件內容:
[mysqld]
character_set_server=utf8
collation-server=utf8_general_ci
port=3306
[mysql]
user=root
password=666
default-character-set=utf8
重啟Mysql服務
C:\Users\Administrator>net stop mysqld
mysqld 服務正在停止.
mysqld 服務已成功停止。
C:\Users\Administrator>net start mysqld
mysqld 服務正在啟動 .
mysqld 服務已經啟動成功。
C:\Users\Administrator>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like '%char%';
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | G:\mysql\mysql-5.6.44-winx64\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set (0.00 sec)
mysql> select from \c
mysql>
命令寫錯了可以使用\c來結束.
總結:不亂碼的思想:系統的編碼、客戶端、服務端、庫、表、列,這幾項的編碼都要統一才不會出現亂碼的情況。