MySQL 修改字符集編碼


查看數據庫創建信息:

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來結束.

總結:不亂碼的思想:系統的編碼、客戶端、服務端、庫、表、列,這幾項的編碼都要統一才不會出現亂碼的情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM