最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php讀取mysql亂碼,用set names XXX解決的原理分享

 更新時間:2011年12月29日 23:41:19   作者:  
解決亂碼的方法,我們經(jīng)常使用“set names utf8”,那么為什么加上這句代碼就可以解決了呢?下面跟著我一起來深入set names utf8的內(nèi)部執(zhí)行原理
先說MySQL的字符集問題。Windows下可通過修改my.ini內(nèi)的

PHP代碼
復制代碼 代碼如下:

[mysql]

default-character-set=utf8 //客戶端的默認字符集
[mysqld]

default-character-set=utf8 //服務器端默認的字符集

假設我們把兩個都設為utf8,然后在MySQL Command Line Client里面輸入“show variebles like“character_set_%”;”,可看到如下字符:
復制代碼 代碼如下:

character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_results latin1
character_set_server utf8
character_set_system utf8

要是我們通過采用UTF-8的PHP程序從數(shù)據(jù)庫里讀取數(shù)據(jù),很有可能是一串“?????”或者是其他亂碼。

解決辦法是,在連接數(shù)據(jù)庫之后,讀取數(shù)據(jù)之前,先執(zhí)行一項查詢“SET NAMES UTF8”,即在PHP里為

mysql_query("SET NAMES UTF8");

//該句話一定要放在數(shù)據(jù)庫服務器連接語句【$connection=mysql_connect($db_host,$db_user,$db_psw)or die("連接服務器失敗");】之后

即可顯示正常(只要數(shù)據(jù)庫里信息的字符正常)。

到MySQL命令行輸入“SET NAMES UTF8;”,然后執(zhí)行“show variebles like“character_set_%”;”,發(fā)現(xiàn)原來為latin1的那些變量“character_set_client”、“character_set_connection”、“character_set_results”的值全部變?yōu)閡tf8了,原來是這3個變量在搗蛋。

查閱手冊,上面那句等于:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

看看這3個變量的作用:
信息輸入路徑:client→connection→server;
信息輸出路徑:server→connection→results。
換句話說,每個路徑要經(jīng)過3次改變字符集編碼。以出現(xiàn)亂碼的輸出為例,server里utf8的數(shù)據(jù),傳入connection轉(zhuǎn)為latin1,傳入results轉(zhuǎn)為latin1,utf-8頁面又把results轉(zhuǎn)過來。如果兩種字符集不兼容,比如latin1和utf8,轉(zhuǎn)化過程就為不可逆的,破壞性的。

但這里要聲明一點,“SET NAMES UTF8”作用只是臨時的,MySQL重啟后就恢復默認了。

接下來就說到MySQL在服務器上的配置問題了。豈不是我們每次對數(shù)據(jù)庫讀寫都得加上“SET NAMESUTF8”,以保證數(shù)據(jù)傳輸?shù)木幋a一致?能不能通過配置MySQL來達到那三個變量默認就為我們要想的字符集?手冊上沒說,我在網(wǎng)上也沒找到答案。所以,從服務器配置的角度而言,是沒辦法省略掉那行代碼的。
總結(jié):為了讓你的網(wǎng)頁能在更多的服務器上正常地顯示,還是加上“SET NAMES UTF8”吧,即使你現(xiàn)在沒有加上這句也能正常訪問。

相關(guān)文章

  • 如何在PHP中讀寫文件

    如何在PHP中讀寫文件

    這篇文章主要介紹了如何在PHP中讀寫文件,幫助大家更好的理解和學習php,感興趣的朋友可以了解下
    2020-09-09
  • PHP 文件上傳全攻略

    PHP 文件上傳全攻略

    PHP文件上傳功能一般都是大家使用事先封裝好的函數(shù),要用的時候直接使用已封裝的函數(shù)就完了,但有時候不能使用封裝函數(shù),還真不大能記住PHP的上傳相關(guān)的東西,在此做個總結(jié),以備后用。
    2010-04-04
  • PHP Parser 掃描應用打印輸出結(jié)構(gòu)語句實例

    PHP Parser 掃描應用打印輸出結(jié)構(gòu)語句實例

    這篇文章主要為大家介紹了PHP Parser 掃描應用打印輸出結(jié)構(gòu)語句實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • PHP操作MySQL的常用代碼段梳理與總結(jié)

    PHP操作MySQL的常用代碼段梳理與總結(jié)

    MySQL時我們常會使用的數(shù)據(jù)庫語言,關(guān)于PHP操作MySQL的常用代碼段小編匯總整理了一遍,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以收藏下
    2021-09-09
  • php注冊登錄系統(tǒng)簡化版

    php注冊登錄系統(tǒng)簡化版

    這篇文章主要為大家詳細介紹了php注冊登錄系統(tǒng)簡化版的實現(xiàn)步驟,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • PHP數(shù)組函數(shù)array_multisort()用法實例分析

    PHP數(shù)組函數(shù)array_multisort()用法實例分析

    這篇文章主要介紹了PHP數(shù)組函數(shù)array_multisort()用法,結(jié)合實例形式詳細分析了array_multisort函數(shù)的功能,定義及進行數(shù)組排序過程中的使用技巧,需要的朋友可以參考下
    2016-04-04
  • php動態(tài)綁定變量的用法

    php動態(tài)綁定變量的用法

    這篇文章主要介紹了php動態(tài)綁定變量的用法,涉及php變量的判定與動態(tài)定義的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 在ThinkPHP6中使用mysql進行分頁查詢的實現(xiàn)代碼

    在ThinkPHP6中使用mysql進行分頁查詢的實現(xiàn)代碼

    隨著互聯(lián)網(wǎng)的快速發(fā)展,web應用程序的開發(fā)也越來越復雜,而分頁查詢是web應用程序中常見的功能之一,thinkphp6是一個web框架,可以幫助開發(fā)人員快速開發(fā)應用程序,在本文中,我們將討論如何在thinkphp6中使用mysql進行分頁查詢,需要的朋友可以參考下
    2024-07-07
  • phpmyadmin里面導入sql語句格式的大量數(shù)據(jù)的方法

    phpmyadmin里面導入sql語句格式的大量數(shù)據(jù)的方法

    phpmyadmin里面導入sql語句格式的大量數(shù)據(jù)的方法
    2010-06-06
  • 利用PHP+JS實現(xiàn)搜索自動提示(實例)

    利用PHP+JS實現(xiàn)搜索自動提示(實例)

    本篇文章對利用PHP+JS實現(xiàn)搜索自動提示的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論

清新县| 富锦市| 南汇区| 绍兴市| 马鞍山市| 邮箱| 呼和浩特市| 临泽县| 甘孜| 龙州县| 登封市| 青田县| 鱼台县| 治多县| 南昌县| 札达县| 叶城县| 成武县| 乌拉特前旗| 德州市| 阜平县| 信宜市| 久治县| 额尔古纳市| 城步| 上林县| 博爱县| 嘉义市| 建湖县| 蒲江县| 工布江达县| 龙游县| 山阴县| 昌图县| 甘南县| 周宁县| 宁阳县| 武夷山市| 鹰潭市| 乡宁县| 兴仁县|