Windows環境下MySQL5.7中文顯示亂碼的三種解決方案
最近在將資料從Oracle遷移到MySQL的過程中,遇到一些問題,其中就包括中文字元顯示亂碼。
資料匯入成功之後,中文欄位內容無法正常顯示。後來才發現客戶端的字符集設定是對的,伺服器端的字符集設定不支援中文字元。
後來經過測試發現,我們可以透過三種方法解決這個問題,按照從低到高的級別分別是:
我們看到hoegh資料庫的預設字符集是latin1。
我們發現包含中文的記錄插入失敗,透過show create table語句可以看到表的預設字符集為latin1,不支援中文。
接下來,我們重建測試表hoegh並設定DEFAULT CHARSET為utf8,然後向表中插入一條英文資訊和中文資訊。
我們看到插入過程沒有報錯,也能正常查詢。
然後,重建測試表hoegh並插入兩條記錄。
我們看到插入過程沒有報錯,也能正常查詢。
此時,為了方便對比,我們檢視一下系統的字符集引數。
我們看到character_set_server引數為latin1,這表明當前伺服器端的字符集為latin1。接下來,我們就透過修改引數檔案來修改這個引數。
首先我們找到配置檔案,在裡面新增一行記錄——character-set-server=utf8。
需要注意的是,上述配置中default-character-set=utf8是針對客戶端的設定,
而character-set-server=utf8是針對伺服器端的設定。
接下來,我們重啟一下MySQL服務,檢視資料庫的字符集引數。
我們看到character_set_server已經成功設定為utf8。然後我們重建測試資料庫hoegh,並重復之前的建表語句。
我們看到一切正常,搞定!
最後強烈建議大家使用utf8!號稱萬國碼!
~~~~~~~ the end~~~~~~~~~
hoegh
2016.11.04
資料匯入成功之後,中文欄位內容無法正常顯示。後來才發現客戶端的字符集設定是對的,伺服器端的字符集設定不支援中文字元。
後來經過測試發現,我們可以透過三種方法解決這個問題,按照從低到高的級別分別是:
- 表級
- 資料庫級
- 伺服器級
1.測試環境 Windows Server 2008 r2+MySQL Community Server (GPL) 5.7.16
我是在Windows Server 2008 r2環境下進行測試,建立了測試資料庫hoegh。點選(此處)摺疊或開啟
-
mysql>
-
mysql> create database hoegh;
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql>
-
mysql> show create database hoegh;
-
+----------+------------------------------------------------------------------+
-
| Database | Create Database |
-
+----------+------------------------------------------------------------------+
-
| hoegh | CREATE DATABASE `hoegh` /*!40100 DEFAULT CHARACTER SET latin1 */ |
-
+----------+------------------------------------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql>
-
mysql> use hoegh;
-
Database changed
-
mysql>
-
mysql> status
-
--------------
-
mysql Ver 14.14 Distrib 5.7.16, for Win64 (x86_64)
-
-
Connection id: 2
-
Current database: hoegh
-
Current user: root@localhost
-
SSL: Not in use
-
Using delimiter: ;
-
Server version: 5.7.16 MySQL Community Server (GPL)
-
Protocol version: 10
-
Connection: localhost via TCP/IP
-
Server characterset: latin1
-
Db characterset: utf8
-
Client characterset: utf8
-
Conn. characterset: utf8
-
TCP port: 3306
-
Uptime: 16 min 25 sec
-
-
Threads: 1 Questions: 18 Slow queries: 0 Opens: 109 Flush tables: 1 Open tables: 102 Queries per second avg: 0.018
-
--------------
-
- mysql>
2.create table設定DEFAULT CHARSET引數
首先我們建立測試表hoegh,分別向表中插入一條英文資訊和中文資訊。點選(此處)摺疊或開啟
-
mysql>
-
mysql> create table hoegh(id int,name varchar(20));
-
Query OK, 0 rows affected (0.20 sec)
-
-
-
mysql> insert into hoegh values(1,'HOEGH');--插入成功
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql>
-
mysql> insert into hoegh values(1,'霍格');--插入失敗
-
ERROR 1366 (HY000):
-
mysql>
-
mysql> show create table hoegh;
-
+-------+------------------------------------------------------------------------------------------------------------------------------
-
| Table | Create Table
-
+-------+------------------------------------------------------------------------------------------------------------------------------
-
| hoegh | CREATE TABLE `hoegh` (
-
`id` int(11) DEFAULT NULL,
-
`name` varchar(20) DEFAULT NULL
-
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
-
+-------+------------------------------------------------------------------------------------------------------------------------------
-
1 row in set (0.02 sec)
-
- mysql>
接下來,我們重建測試表hoegh並設定DEFAULT CHARSET為utf8,然後向表中插入一條英文資訊和中文資訊。
點選(此處)摺疊或開啟
-
mysql>
-
mysql> drop table hoegh;
-
Query OK, 0 rows affected (0.13 sec)
-
-
mysql>
-
mysql> create table hoegh(id int,name varchar(20)) DEFAULT CHARSET=utf8;
-
Query OK, 0 rows affected (0.17 sec)
-
-
mysql> show create table hoegh;
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
| Table | Create Table |
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
| hoegh | CREATE TABLE `hoegh` (
-
`id` int(11) DEFAULT NULL,
-
`name` varchar(20) DEFAULT NULL
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql>
-
mysql> insert into hoegh values(1,'HOEGH');--插入成功
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql> insert into hoegh values(1,'霍格');--插入成功
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql> select * from hoegh;
-
+------+--------+
-
| id | name |
-
+------+--------+
-
| 1 | HOEGH |
-
| 1 | 霍格 |
-
+------+--------+
-
2 rows in set (0.00 sec)
-
- mysql>
3.create database設定CHARACTER SET引數
我們重建測試庫hoegh,並設定CHARACTER SET引數。然後,重建測試表hoegh並插入兩條記錄。
點選(此處)摺疊或開啟
-
mysql>
-
mysql> drop database hoegh;--刪除測試庫
-
Query OK, 1 row affected (0.11 sec)
-
-
mysql>
-
mysql> create database hoegh CHARACTER SET 'utf8';--重建測試庫hoehg並設定CHARACTER SET引數
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql> show create database hoegh;
-
+----------+----------------------------------------------------------------+
-
| Database | Create Database |
-
+----------+----------------------------------------------------------------+
-
| hoegh | CREATE DATABASE `hoegh` /*!40100 DEFAULT CHARACTER SET utf8 */ |
-
+----------+----------------------------------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql>
-
mysql> use hoegh
-
Database changed
-
mysql> create table hoegh(id int,name varchar(20));
-
Query OK, 0 rows affected (0.19 sec)
-
-
-
mysql> show create table hoegh;
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
| Table | Create Table |
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
| hoegh | CREATE TABLE `hoegh` (
-
`id` int(11) DEFAULT NULL,
-
`name` varchar(20) DEFAULT NULL
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql>
-
mysql> insert into hoegh values(1,'HOEGH');--插入成功
-
Query OK, 1 row affected (0.02 sec)
-
-
mysql> insert into hoegh values(1,'霍格');--插入成功
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql>
-
mysql> select * from hoegh;
-
+------+--------+
-
| id | name |
-
+------+--------+
-
| 1 | HOEGH |
-
| 1 | 霍格 |
-
+------+--------+
-
2 rows in set (0.00 sec)
-
- mysql>
此時,為了方便對比,我們檢視一下系統的字符集引數。
點選(此處)摺疊或開啟
-
mysql> show variables like '%char%';
-
+--------------------------+-------------------------------------------+
-
| Variable_name | Value |
-
+--------------------------+-------------------------------------------+
-
| character_set_client | utf8 |
-
| character_set_connection | utf8 |
-
| character_set_database | latin1 |
-
| character_set_filesystem | binary |
-
| character_set_results | utf8 |
-
| character_set_server | latin1 |
-
| character_set_system | utf8 |
-
| character_sets_dir | E:\mysql-5.7.16-winx6in\share\charsets\ |
-
+--------------------------+-------------------------------------------+
-
8 rows in set, 1 warning (0.00 sec)
-
- mysql>
4.配置my.ini中的character_set_server引數
透過直接配置my.ini方式修改mysql的伺服器端字符集,這樣就可以一勞永逸。首先我們找到配置檔案,在裡面新增一行記錄——character-set-server=utf8。
點選(此處)摺疊或開啟
-
[mysql]
-
default-character-set=utf8
-
[mysqld]
-
max_connections=200
-
default-storage-engine=INNODB
-
basedir =E:\mysql-5.7.16-winx64\bin
-
datadir =E:\mysql-5.7.16-winx64\data
-
port = 3306
-
autocommit=0
- character-set-server=utf8
而character-set-server=utf8是針對伺服器端的設定。
接下來,我們重啟一下MySQL服務,檢視資料庫的字符集引數。
點選(此處)摺疊或開啟
-
E:\mysql-5.7.16-winx64\bin>net stop mysql
-
MySQL 服務正在停止.
-
MySQL 服務已成功停止。
-
-
-
E:\mysql-5.7.16-winx64\bin>
-
E:\mysql-5.7.16-winx64\bin>net start mysql
-
MySQL 服務正在啟動 .
-
MySQL 服務已經啟動成功。
-
-
-
E:\mysql-5.7.16-winx64\bin>mysql -u root -proot
-
mysql: [Warning] Using a password on the command line interface can be insecure.
-
Welcome to the MySQL monitor. Commands end with ; or \g.
-
Your MySQL connection id is 2
-
Server version: 5.7.16 MySQL Community Server (GPL)
-
-
Copyright (c) 2000, 2016, 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 | E:\mysql-5.7.16-winx6in\share\charsets\ |
-
+--------------------------+-------------------------------------------+
-
8 rows in set, 1 warning (0.00 sec)
-
- mysql>
我們看到character_set_server已經成功設定為utf8。然後我們重建測試資料庫hoegh,並重復之前的建表語句。
點選(此處)摺疊或開啟
-
mysql>
-
mysql> drop database hoegh;
-
Query OK, 1 row affected (0.16 sec)
-
-
mysql> create database hoegh;--重建測試資料庫hoegh
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql>
-
mysql> show create database hoegh;
-
+----------+----------------------------------------------------------------+
-
| Database | Create Database |
-
+----------+----------------------------------------------------------------+
-
| hoegh | CREATE DATABASE `hoegh` /*!40100 DEFAULT CHARACTER SET utf8 */ |
-
+----------+----------------------------------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql>
-
mysql> use hoegh;
-
Database changed
-
mysql> create table hoegh(id int,name varchar(20));
-
Query OK, 0 rows affected (0.17 sec)
-
-
mysql>
-
mysql> show create table hoegh;
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
| Table | Create Table |
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
| hoegh | CREATE TABLE `hoegh` (
-
`id` int(11) DEFAULT NULL,
-
`name` varchar(20) DEFAULT NULL
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
-
+-------+----------------------------------------------------------------------------------------------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql>
-
mysql> insert into hoegh values(1,'HOEGH');
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql> insert into hoegh values(1,'霍格');
-
Query OK, 1 row affected (0.00 sec)
-
-
mysql> select * from hoegh;
-
+------+--------+
-
| id | name |
-
+------+--------+
-
| 1 | HOEGH |
-
| 1 | 霍格 |
-
+------+--------+
-
2 rows in set (0.00 sec)
-
- mysql>
最後強烈建議大家使用utf8!號稱萬國碼!
~~~~~~~ the end~~~~~~~~~
hoegh
2016.11.04
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-2127822/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- navicat for mysql顯示中文亂碼解決方案MySql
- LiveCharts中文顯示亂碼問題的解決Echarts
- ubuntu中文顯示亂碼解決辦法Ubuntu
- git操作時中文顯示亂碼的解決方法Git
- 解決MySQL中文亂碼和插入中文不顯示的方法MySql
- Zabbix圖表顯示中文亂碼解決辦法
- 解決ssh連線CentOS後中文顯示亂碼CentOS
- 解決Hive使用desc顯示中文註釋亂碼Hive
- Redis中文顯示為Unicode編碼 亂碼的解決辦法RedisUnicode
- 生僻字顯示?的字元亂碼解決字元
- matplotlib 圖示 中文亂碼, 與 wordcloud 詞雲圖 中文亂碼 解決方法Cloud
- confluence中文顯示亂碼問題
- Linux終端中文菱形亂碼解決方案Linux
- css中文字型亂碼解決方案CSS
- windows10系統下應用程式中文亂碼的解決方法Windows
- 如何解決python 圖表中文顯示亂碼問題Python
- hive表查詢中文顯示亂碼Hive
- 完美解決jspdf各種中文亂碼問題JS
- win10新裝軟體亂碼怎麼解決_win10新裝軟體顯示亂碼的解決方案Win10
- OxyPlot.SkiaSharp中文顯示亂碼的問題
- MySQL解決中文亂碼MySql
- idea配置檔案.properties中文亂碼顯示????Idea
- Mysql輸出中文顯示亂碼處理MySql
- 在Windows環境下使用AMD顯示卡執行Stable DiffusionWindows
- whisper v3 finetune 中文亂碼問題的解決方案
- ROS中解決中文亂碼ROS
- 解決中文亂碼問題
- request/response解決中文亂碼
- navicat 表中文顯示? 解決
- glibc 升級導致Linux顯示中文亂碼Linux
- Datagrip連線SQLserver表中出現中文亂碼解決方案SQLServer
- 解決了一個困擾我近一年的vim顯示中文亂碼的問題
- C# 解決httplistener querystring 中文亂碼、返回json中文格式亂碼C#HTTPJSON
- [BUG反饋]mac環境下驗證碼不顯示Mac
- win10系統中文軟體顯示亂碼怎麼回事_win10安裝中文軟體出現亂碼解決教程Win10
- java實現瀏覽器下載附件時檔名中文亂碼解決方案Java瀏覽器
- Spring MVC 中文編碼亂碼解決SpringMVC
- tomcat-windows環境頁面亂碼問題TomcatWindows
- 【解決方案】Windows 環境 Sublime Text 4 中缺少 Package ControlWindowsPackage