php連接數據庫輸出的中文幾個字就…

我們首先假設數據庫中采用的編碼為UTF-8
這時我們在PHP頁面中應當首先添加

  1. "Content-Type" content="text/html; charset=utf-8" />

文件保存時的編碼類型也必須是utf-8。

之后在數據庫查詢前添加

  1. mysql_query("set names 'utf8'");

注:這句代碼的插入位置,應該插入在顯示數據的代碼前,否則就沒有意義了,也可以嘗試加在數據庫鏈接文件的最后,便于每個頁面都可以一次性添加好,如果要錄入繁體字,還可以嘗試更改為GBK試試

該行語句的編碼值也應當與上面的編碼值一樣。

總而言之,網頁保存的編碼類型、網頁的charset=utf-8、和執行的set names utf8語句的編碼方式應當一致

下面網上都有引用 這里也摘錄如下 有待細細斟酌

MySQL的“SET NAMES x”字符集問題分析

近來接受BBT的培訓,做一個投票系統。系統代碼倒不是很難,但是我的時間主要花費在了研究字符集和編碼上面。MySQL和Apache兩個系統的 編碼(字符集)問題讓我費勁腦筋,吃盡苦頭。網上對這些問題的解決比較零散,比較片面,大部分是提供解決方法,卻不說為什么。于是我將這幾天收獲總結一 下,避免后來者再走彎路。這篇文章對PHP編寫有一點幫助(看完你就知道,怎樣讓你的PHP程序在大部分空間提供商的服務器里顯示正常),但是更多幫助在 于網絡服務器的架設和設置。

先說MySQL的字符集問題。Windows下可通過修改my.ini內的

  1. # CLIENT SECTION
  2. [mysql]
  3. default-character-set=utf8
  4. # SERVER SECTION
  5. [mysqld]
  6. 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

其中的utf8隨著我們上面的設置而改動。此時,要是我們通過采用UTF-8的PHP程序從數據庫里讀取數據,很有可能是一串“?????” 或者是其他亂碼。網上查了半天,解決辦法倒是簡單,在連接數據庫之后,讀取數據之前,先執行一項查詢“SET NAMES UTF8”,即在PHP里為

  1. mysql_query("SET NAMES UTF8");

即可顯示正常(只要數據庫里信息的字符正常)。為什么會這樣?這句查詢“SET NAMES UTF8”到底是什么作用?

到MySQL命令行輸入“SET NAMES UTF8;”,然后執行“show variebles like “character_set_%”;”,發現原來為latin1的那些變量“character_set_client”、 “character_set_connection”、“character_set_results”的值全部變為utf8了,原來是這3個變量在搗 蛋。查閱手冊,上面那句等于:

  1. SET character_set_client = utf8;
  2. SET character_set_results = utf8;
  3. SET character_set_connection = utf8;

看看這3個變量的作用:

信息輸入路徑:client→connection→server;
信息輸出路徑:server→connection→results。

換句話說,每個路徑要經過3次改變字符集編碼。以出現亂碼的輸出為例,server里utf8的數據,傳入connection轉為latin1, 傳入results轉為latin1,utf-8頁面又把results轉過來。如果兩種字符集不兼容,比如latin1和utf8,轉化過程就為不可逆 的,破壞性的。所以就轉不回來了。

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

接下來就說到MySQL在服務器上的配置問題了。豈不是我們每次對數據庫讀寫都得加上“SET NAMES UTF8”,以保證數據傳輸的編碼一致?能不能通過配置MySQL來達到那三個變量默認就為我們要想的字符集?手冊上沒說,我在網上也沒找到答案。所以, 從服務器配置的角度而言,是沒辦法省略掉那行代碼的。

總結:為了讓你的網頁能在更多的服務器上正常地顯示,還是加上“SET NAMES UTF8”吧,即使你現在沒有加上這句也能正常訪問。

?

轉載于:https://www.cnblogs.com/qmsu/p/3832503.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/261041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/261041.shtml
英文地址,請注明出處:http://en.pswp.cn/news/261041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android開啟服務器配置,Android基于XMPP開發(一)【openfire服務器配置】

OpenFireOpenFire 是采用Java開發的基于XMPP(Jabber)協議,開源實時協作(RTC)服務器。Smack 是用 Java編 寫的XMPP客戶端代碼庫,是 spark 的核心開源界總是有許多有趣的東東,這三個合起來就是一個完整的XMPP IM 實現。OpenFire ——服務器端Sp…

Python 生成器 迭代器

1.1 生成器通過列表生成式,我們可以直接創建一個列表。但是,受到內存限制,列表容量肯定是有限的。而且,創建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素&#x…

尋路基本工具類定義 AIDefine.cpp

1 #include "AIDefine.h" 2 3 PointI AI_FindHelpPoint[8] {PointI(-1,0),PointI(0,-1),PointI(1,0),PointI(0,1),PointI(-1,-1),PointI(1,-1),PointI(1,1),PointI(-1,1)}; 轉載于:https://www.cnblogs.com/liusijian/p/3438542.html

android相對布局代碼,Android基礎_3 Activity相對布局(示例代碼)

相對布局要比前面講的線性布局和表格布局要靈活一些,所以平常用得也是比較多的。相對布局控件的位置是與其周圍控件的位置相關的,從名字可以看出來,這些位置都是相對的,確定出了其中一個控件的位置就可以確定另一個控件的位置了。…

WSDL文件生成WEB service server端C#程序

一般一個已經實現功能的WEB Server會發布自己的WSDL文件,供客戶端生成代理類。 但有時是先有的server與client交互的接口定義(WSDL)文件,然后由server和client端分別寫程序,一個提供web服務,一個使用web服…

php二維數組排序 按照指定的key 對數組進行排序

2019獨角獸企業重金招聘Python工程師標準>>> /*** desc arraySort php二維數組排序 按照指定的key 對數組進行排序* param array $arr 將要排序的數組* param string $keys 指定排序的key* param string $type 排序類型 asc | desc* return array*/ function arrayS…

劍指Offer - 九度1367 - 二叉搜索樹的后序遍歷序列

劍指Offer - 九度1367 - 二叉搜索樹的后序遍歷序列2013-11-23 03:16 題目描述:輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 輸入:每個測試案例包…

13個代碼注釋的小技巧

13個代碼注釋的小技巧 這篇文章是由Jos M. Aguilar在他卓越的博客中以西班牙語的形式首發,其后Timm Martin在獲得Aguilar先生的授權下,對該文章進行翻譯、修改,并且在DevTopics上發布。 以下13個小技巧可以使得你的代碼在長時間內依然能夠保…

android webview onconsolemessage,Android WebView一些特殊的使用

在Android5.0之前,webView默認是允許加載混合網絡協議內容的;在5.0以上,默認不允許加載http和https的混合內容if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {webView.getSettings().setMixedContentMode(WebSettings.MIXED…

讓您的Xcode鍵字如飛

2019獨角獸企業重金招聘Python工程師標準>>> 作者:吳白(微博) 手指在鍵盤上飛速跳躍,終端上的代碼也隨著飛舞,是的這確實很酷。優秀的程序員總是這么一群人,他們不拘于現狀,不固步自封,他們喜歡…

【Android Developers Training】 6. 配置Action Bar

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。 原文鏈接:http://developer.android.com/training/basics/actionbar/setting-up.html 配…

android 7 創建文件夾,Android 在 res/layout 文件夾 下創建一個 子文件夾實例

Android 資源文件夾 Layout 文件夾Layout文件是存放Android的布局文件的資源文件夾,但是如果你想要在里面創建子文件夾,你會發現xml文件報錯。如何在Layout文件夾下方創建Layout的子文件夾。這邊我們需要著一個一個點就是我們的Layout 文件夾是屬于資源文…

一步一步學NUnit

轉載:http://tech.sina.com.cn/s/2009-07-17/1129988785.shtml 單元測試基礎知識 單元測試是開發者編寫的一小段代碼,用于檢驗被測代碼的一個很小的、很明確的功能是否正確。通常而言,一個單元測試是用于判斷某個特定條件(或者場景)下某個特定…

面向對象JS編程(一)——創建對象

1.普通模式 var person new Object();person.name "Laughing";person.age 28;person.job "Software Engineer";peron.sayName function(){ alert(this.name);};person.sayName(); 缺點:創建多個對象時,會產生大量的重復代碼…

android功耗iphone,是心目中的安卓小屏旗艦嗎?iPhone 8尺寸大小,4000mAh電池容量...

相信很多人都都喜歡小屏手機,但因為小屏手機總體需求不多,而且相對大屏更不好做,所以手機商都不愿意做小屏手機,這也導致市面上小屏手機非常少,蘋果推出了iPhone 12 Mini,但是因為電池只有2200mAh&#xff…

mySQL 數據庫錯誤

2019獨角獸企業重金招聘Python工程師標準>>> java.sql.SQLException: The user specified as a definer (..%) does not exist 視圖、存儲過程的使用者若非其創建者,就會出現這樣的錯誤 可以修改用戶的權限或重新創建進行解決 轉載于:https://my.oschina…

委托、事件的個人理解

事件:一個用event進行了封裝的委托類型的變量,使得在進行注冊的時候只能使用 或者- 需要一個觸發者和一個執行者,類似于Observer模式中的Subject和Observer(當一個對象的狀態發生改變時,所有依賴于他的對象都會得到通知…

android 組建水平居中,Android開發借助LinearLayout實現垂直水平居中布局

釋放雙眼,帶上耳機,聽聽看~!在Android應用程序的開發中,有時需要限制水平和垂直屏幕的切換,今天這篇文章是技術狗小編為大家整理的Android應用借助LinearLayout實現垂直水平居中布局,希望對你學習這方面有所…

我不想再活在別人的世界里

我過多的關注別人的世界。 卻沒有去尋找屬于自己的故事 總是猶豫著要不要出發 然后發現 一天就這么過去了。 轉載于:https://www.cnblogs.com/zjjsxuqiang/p/3445392.html

面壁人VS智子 --- 搜索排序的作弊和反作弊

搜索引擎已經是目前網絡流量最大入口,在大搜上,基本上大家打開網頁做的第一件事情就是打開一個搜索引擎,然后鍵入你感興趣的內容,然后開始瀏覽。如果是個電商的網站,你打開以后,基本上也是直接鍵入你感興趣…