Php和Mysql乱码问题
生活随笔
收集整理的這篇文章主要介紹了
Php和Mysql乱码问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
在mysql數據庫中有3個變量:
character_set_client
character_set_connection
character_set_results
你可以分別理解為:客戶端 連接器 返回值
客戶端 :通常有cmd下的命令行,或者瀏覽器
連接器 :這個比較抽象,我們看不到,應該是在mysql數據庫中的
返回值 : 就是以什么樣的字符編碼來給客戶端
我們一般在cmd下set names gbk 或者php文件中 mysql_query('set names utf8'),其實就是相當于同時設置上面所說的3個變量的值為 gbk 或者 utf8 ,也就是客戶端、連接器、返回值都為一樣的字符編碼,如果你足夠耐心也可以再mysql命令行下分別設置這3個變量的值,比如:
set character_set_client =gbk;
set character_set_connection = gbk;
set character_set_results = gbk;
按照你說的 數據庫已經設置了utf-8 ,php文件也設置了utf-8 ,而且在添加了 set names utf8 就不亂嗎了,你應該是用瀏覽器查看的吧?這么說你的瀏覽器應該是urf8字符集了,那么問題應該就是出在 連接器 這個環節上。字符集設置有個限制,那就是字符集編碼的大小,應該是這個規律: 客戶端 <= 連接器 <= 服務端?
那么我在說下連接器的作用,連接器就是接受客戶端傳來的數據,先接受保存起來,在轉換成服務端所需的字符編碼。比如客戶端是GBK ,連接器也是GBK,服務端是UTF8,那么 連接器就會把客戶端傳來的GBK數據先存儲起來,轉換成服務器的UTF8后傳給服務器。
那么回到字符集設置規律上,GBK存儲漢字需要2個字節,UFT8存儲漢字需要3個字節 ,如果你的客戶端是UTF8,而連接器是GBK,那么就會在存儲上出現問題,所以存入數據庫后就會亂碼。?
另外你是否進行了insert 操作,使用的 瀏覽器 還是 cmd 下命令行進行的?還有你查看是通過瀏覽器直接查看php生成的結果還是通過phpmyadmin還是cmd下的命令行查看數據庫?
轉載于:https://my.oschina.net/maner/blog/146554
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Php和Mysql乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP中遍历关联数组的方法
- 下一篇: HCP Anywhere:为HDS内容云