程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 【MySQL】統一控制台-pma-PHP編碼!解決中文亂碼問題

【MySQL】統一控制台-pma-PHP編碼!解決中文亂碼問題

編輯:MySQL綜合教程

【MySQL】統一控制台-pma-PHP編碼!解決中文亂碼問題


折騰了很久,看了很多解決方案,要麼就是pma能顯示中文,控制台亂碼,要麼就PHP調用顯示出來是亂碼,很蛋疼,覺得必須要寫個文章總結一下。

1. 理解MySQL的編碼機制

MySQL處理連接時,外部連接發送過來的SQL請求會根據以下順序進行轉換:
character_set_client //客戶連接所采用的字符集
|
character_set_connection //MySQL連接字符集
|
character_set_database //數據庫所采用的字符集(表,列)
|
character_set_results //客戶機顯示所采用的字符集

詳見:mysql編碼詳解

除此之外,還有數據庫字符集、表字符集、字段字符集。

2.產生亂碼的根本原因在於

① 客戶機沒有正確地設置client字符集,導致原先的SQL語句被轉換成connection所指字符集,而這種轉換,是會丟失信息的,如果client是utf8格式,那麼如果轉換成gb2312格式,這其中必定會丟失信息,反之則不會丟失。一定要保證connection的字符集大於client字符集才能保證轉換不丟失信息。
② 數據庫字體沒有設置正確,如果數據庫字體設置不正確,那麼connection字符集轉換成database字符集照樣丟失編碼,原因跟上面一樣。

3. 解決控制台-pma亂碼

我這裡提供的方法是,將所有字符集統一為utf8

①統一 client、connection、database的字符集。

 

set character_set_client = gbk;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = gbk;

這裡說明一下,client=gbk是為了可以在控制台中輸入中文,results=gbk是為了可以在控制台中顯示中文。

修改完之後查看一下

 

 show variables like "char%";
\+--------------------------+------------------------------------+
| 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 | d:\WebServer\MySQL\share\charsets\ |

+--------------------------+------------------------------------+

②統一 數據庫、數據表、表字段的字符集。

第一步:查看特定數據庫字符集

查看數據庫db_test的字符集

show create database db_test;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| db_test | CREATE DATABASE `db_test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
\

如圖,可以看出來是 db_test數據庫的字符集已經是utf8了

第二步:查看指定數據表字符集

查看數據表person的字符集

show create table person;
\CREATE TABLE `person` (
`name` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

如圖,可以看出來我的數據表也是utf8的字符集

第三步:查看指定表字段的字符集

show full columns from person;
\+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| name | varchar(30) | utf8_general_ci | NO | | NULL | | select,insert,update,references | |
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+

這個是排序字符集utf8_general_ci,但是如果沒有人為改動的話,可以認為字段字符集為utf8,要是不確定的話,就直接修改。

第四步:修改字符集為utf8

修改數據庫字符集

alter database db_test charset utf8;
修改表字符集

 

 

alter table person charset utf8;

 

修改字段字符集

alter table `person` modify column `name` varchar(30) character set utf8 not null;
(我這裡同時設置了字段name不能為空,並且為varchar(30)類型)

 

更多修改方法請參考百度!!

以上為臨時設置。重啟mysql後又會恢復到原狀,所以在mysql目錄下的my.ini配置文件中的[mysqld]節點下加一句:

character_set_server=utf8

\

4. 解決PHP獲取數據的亂碼情況

\

在連接字符串中加一句:charset=utf8,即可。

\

5. 測試

在pma中添加一個中文,然後在控制台和pma和php中查看,

在php中執行一個插入中文語句,然後在控制台-pma-php中查看

在cmd中插入一個中文,然後在其他地方查看。

效果如如下:

cmd中:

pma中:

\\

php中(網頁編碼格式為UTF-8):

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved