MySQL中UTF8編碼的資料在cmd下亂碼
花了一下午,解決MySQL在Windows的cmd下中文亂碼的問題。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
mysql> use abc; Database changed
mysql> select * from school;
+ ----------+--------------------+-------------------------------------------+
| schoolid | name | address |
+ ----------+--------------------+-------------------------------------------+
| 1 | 鍖椾含澶у | 鍖椾含甯備腑鍏蟲溈鍖楀ぇ琛?7鍙? | 2 | 娓呭崕澶у | 鍖椾含甯傛搗娣€鍖轟腑鍏蟲溈澶ц | 3 | 鍗椾含澶у | 奼熻嫃鐪佸崡浜競榧撴ゼ鍖烘眽鍙h礬22鍙? | 4 | 涓浗浜烘皯澶у | 鍖椾含甯傛搗娣€鍖轟腑鍏蟲溈澶ц59鍙? | 5 | 鍘﹂棬澶у | 紱忓緩鐪佸帵闂ㄥ競鎬濇槑鍗楄礬422鍙? + ----------+--------------------+-------------------------------------------+
5 rows in set (0.00 sec)
|
資料是通過SQL檔案匯入的,這個SQL檔案也是UTF8編碼的:
資料庫、表都重建了,資料檔案也保證是UTF8了,但cmd視窗中還是亂碼。。。傷心。。。
首先,安裝MySQL的時候,我很清楚的記得我設定的編碼為UTF8,所以在my.ini檔案中:
1
2
3
4
5
6
7
|
# ... [mysql] default -character-set=utf8
# ... [mysqld] # ... character-set-server=utf8 |
然後再mysql中驗證:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql> show variables like `%character%` ;
+ --------------------------+------------------------------------
| 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 | C:Program Files (x86)MySQLMySQL + --------------------------+------------------------------------
8 rows in set (0.00 sec)
|
全部都是utf8編碼。接下來驗證資料庫的預設編碼:
1
2
3
4
5
6
7
|
mysql> show create database abc;
+ ----------+--------------------------------------------------------------+
| Database | Create Database |
+ ----------+--------------------------------------------------------------+
| abc | CREATE DATABASE `abc` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+ ----------+--------------------------------------------------------------+
1 row in set (0.00 sec)
|
可以看到,資料庫的預設編碼是utf8。再來驗證資料表的預設編碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
mysql> show create table school;
+ --------+--------------------------------------------+
| Table | Create Table |
+ --------+--------------------------------------------+
| school | CREATE TABLE `school` (
`schoolid` int (11) NOT NULL AUTO_INCREMENT,
` name ` varchar (45) NOT NULL ,
`address` varchar (200) NOT NULL ,
`phone` varchar (11) NOT NULL ,
`master` varchar (10) NOT NULL ,
PRIMARY KEY (`schoolid`),
UNIQUE KEY `master_UNIQUE` (`phone`),
UNIQUE KEY `address_UNIQUE` (`address`),
UNIQUE KEY `name_UNIQUE` (` name `)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 |
+ --------+--------------------------------------------+
|
可以看到,表的編碼依然為utf8,那麼為什麼還是會亂碼呢??百度谷歌都找遍了,還是亂碼,然並卵。鬱悶半天,無意中在一個網頁上看到有人說“這是因為Windows的cmd預設編碼是GBK,MySQL裡面為UTF8,自然就亂碼了,改用工具試試”,這才一語驚醒夢中人,於是使用工具查詢資料庫,結果是這樣滴:
這才發現其實MySQL早就按照我設定的UTF編碼儲存資料了。我暈,竟然被cmd的外表矇騙了。。。。。。那麼,有沒有辦法設定讓cmd也正確顯示UTF8的編碼呢??又去百度了。。。結果是:還真有!
在cmd中登入mysql後,在輸入sql語句前,先設定編碼:set names gbk;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from school;
+ ----------+--------------+------------------------------+-
| schoolid | name | address |
+ ----------+--------------+------------------------------+-
| 1 | 北京大學 | 北京市中關村北大街47號 | 2 | 清華大學 | 北京市海淀區中關村大街 | 3 | 南京大學 | 江蘇省南京市鼓樓區漢口路2 | 4 | 中國人民大學 | 北京市海淀區中關村大街 | 5 | 廈門大學 | 福建省廈門市思明南路422號 + ----------+--------------+------------------------------+-
5 rows in set (0.00 sec)
|
那麼,為什麼這樣設定後,就能正確顯示以UTF8儲存的資料了呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql> show variables like `%character%` ;
+ --------------------------+-----------------------------------
| Variable_name | Value + --------------------------+-----------------------------------
| character_set_client | gbk | character_set_connection | gbk | character_set_database | utf8 | character_set_filesystem | binary
| character_set_results | gbk | character_set_server | utf8 | character_set_system | utf8 | character_sets_dir | C:Program Files (x86)MySQLMySQL + --------------------------+-----------------------------------
8 rows in set (0.00 sec)
|
可以看到,client,connection和result的編碼已經設定為gbk了,但server,database,filesystem的編碼還是utf8!這就是說,雖然資料依然是使用utf8編碼儲存的,但是客戶端以及返回的結果集是gbk的,而此時cmd視窗的編碼正好是gbk,因此該結果集能正確顯示了。
搞了半天,結果是這樣。。。但這樣也好,畢竟讓我印象深刻了,應該不會有下次了。
完。
相關文章
- MySql修改資料庫編碼為UTF8MySql資料庫
- Linux下修改MySQL資料庫字元編碼為UTF-8解決中文亂碼LinuxMySql資料庫字元
- utf8的編碼原理
- 資料遷移(MYSQL--ORACLE)中碰到的亂碼問題MySqlOracle
- TOMCAT 請求資料編碼亂碼 問題Tomcat
- PHP中GBK和UTF8亂碼解決方案PHP
- mysql修改資料庫編碼MySql資料庫
- MySQL 配置資料庫編碼MySql資料庫
- MySQL資料庫、表的字元編碼MySql資料庫字元
- pdo_mysql 資料庫亂碼問題MySql資料庫
- MySQL亂碼MySql
- C++ url中文編碼處理 編碼轉為UTF8 CChineseCode下載C++
- Mysql編碼, Mysql編碼流程, Mysql編碼順序, Mysql編碼原理, Mysql編碼修改依據MySql
- 記住,永遠不要在 MySQL 中使用 “utf8” 編碼MySql
- [MySQL Help]MySQL Workbench用csv格式匯出資料亂碼MySql
- hibernate插入中文到mysql資料庫亂碼MySql資料庫
- MySQL資料匯入匯出亂碼問題MySql
- mysql匯入資料亂碼錯誤一則MySql
- ofbiz中mysql的中文亂碼問題!MySql
- mysql中文亂碼MySql
- springweb開發中編碼亂碼問題解析SpringWeb
- python資料亂碼Python
- 我在oracle8i中,在資料庫和頁面顯示的都是亂碼?Oracle資料庫
- windows在指定資料夾下開啟cmdWindows
- 讓windows cmd 支援utf8中文Windows
- Windows控制檯(cmd)中文亂碼解決方法Windows
- cmd 命令列模式下輸出中文時顯示亂碼的解決方案命令列模式
- mysql資料庫concat拼接字串亂碼問題MySql資料庫字串
- 修改mysql資料庫的預設編碼方式MySql資料庫
- cmd命令列下用命令執行SQL指令碼到SQL Server資料庫中命令列SQL指令碼Server資料庫
- iOS 將網址中%形式的引數進行UTF8編碼iOS
- mybatis查詢mysql 資料庫中 BLOB欄位,結果出現亂碼MyBatisMySql資料庫
- MySQL4.1的latin1編碼與中文、藏文亂碼解決方案MySql
- linux亂碼和資料庫亂碼的問題簡單排查Linux資料庫
- mysql亂碼問題MySql
- 在linux中安裝mysql並解決中文亂碼問題LinuxMySql
- php 擷取漢字字串 亂碼解決 支援utf8和gb2312的編碼的漢字PHP字串
- 我在jsp中遇到的亂碼問題!JS