為了讓你的網頁能在更多的服務器上正常地顯示,還是加上“SET NAMES UTF8”吧

Repinted:http://blog.csdn.net/class1/archive/2006/12/30/1469298.aspx

為了讓你的網頁能在更多的服務器上正常地顯示,還是加上“SET NAMES UTF8”吧(可以根據你的喜歡選擇相應的編碼,如gb2312),即使你現在沒有加上這句也能正常訪問。

先說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 variables 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 variables 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來達到那三個變量默認就為我們要想的字符集?手冊上沒說,我在網上也沒找到答案。所以,從服務器配置的角度而言,是沒辦法省略掉那行代碼的。

總結以下幾點:

要保證select的返回與程序編碼一致,即character_set_results與程序編碼一致.

要保證程序編碼與瀏覽器一致,即程序編碼與<meta http-equiv="Content-Type" content="text/html; charset=?" />一致.

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

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

相關文章

WebLogic11g 安裝配置規范

目錄 1 文檔控制... 3 1.1 修改記錄... 3 1.2 分發者... 3 1.3 審閱記錄... 3 1.4 相關文檔... 3 2 安裝準備... 4 2.1 安裝前需要開發單位提供的信息... 4 2.2 本地磁盤空間配置規范... 4 2.3 版本要求規范... 4 2.4 weblogic部署配置規范... 5 2.4.1操作系統要求.…

JDK源碼解析之java.util.ListIterator

ListIterator是一個功能更加強大的迭代器接口, 它繼承于Iterator接口,只能用于各種List類型的訪問。可以通過調用listIterator()方法產生一個指向List開始處的ListIterator, 還可以調用listIterator(n)方法創建一個一開始就指向列表索引為n的元素處的ListIterator。 一、源碼解…

VsFTP出現500 OOPS: cannot change directory的解決辦法

cannot change directory:/home/*** ftp服務器連接失敗,錯誤提示:500 OOPS: cannot change directory:/home/*******500 OOPS: child died解決方法:在終端輸入命令&#xff1a;setsebool ftpd_disable_trans 1 service vsftpd restart就&#xff2f;&#xff2b;了&#xff01;…

Oracle的reman命令

list命令&#xff1a; list backupset summary 列出概要信息 list backupset by file list archivelog all 列出所有歸檔日志 list backupset tag 00列出標簽信息 list backupset 8 列出8號…

Ubuntu root賬號的使用

第一次安裝好Ubuntu后&#xff0c;root帳號不能用。在安裝期間創建的第一個用戶對系統有管理權&#xff0c;通過“sudo”能象root運行程序.使用時僅需它的普通用戶密碼。例如: sudo apt-get update  如果你希望像傳統 UNIX 樣式使用root帳號。你能通過輸入 sudo passwd root …

JDK源碼解析之Java.util.Collection

Collection是單例集合的頂層接口&#xff0c;它表示一組對象&#xff0c;這些對象也稱為Collection的元素&#xff0c;JDK 不提供此接口的任何直接實現&#xff0c;它提供更具體的子接口&#xff08;如Set和List&#xff09;實現 一、源碼解析 1、接口定義 public interface …

Vim 命令操作

vim命令操作命令模式dd 編輯模式 末行模式 1.地址定界&#xff1a; startpos,endpos #:特定的第#行&#xff0c;例如S即第5行;:當前行;$:最后一行; #,#:指定行范圃,左側起始行&#xff0…

JDK源碼解析之Java.util.Collections

java.util.Collections 是一個包裝類。它包含有各種有關集合操作的靜態多態方法。此類不能實例化&#xff0c;就像一個工具類,服務于Java的Collection框架。 一、源碼解析 1、不可實例化 private Collections() {}Collections是util包中一個不可實例化的類。 2、優化參數 pri…

ubuntu下安裝jdk

安裝1.5 sudo apt-get install sun-java5-jdk sudo update-alternatives --config java sudo update-alternatives --config javac 安裝1.6 sudo apt-get install sun-java6-jdk sudo update-alternatives --config java sudo update-alternatives --config javac 轉載:http:/…

使用validate驗證數據庫

驗證數據備份集是不是可以用來做恢復和數據文件是否損壞、壞塊 三種方式&#xff1a; 1.validate validate database ;validate tablespace users; validate datafile 1; validate archivelog all validate datafile 1 block 10; validate backupset 28; db…

JDK源碼解析之java.util.AbstractCollection

AbstractCollection類提供了collection的實現類應該具有的基本方法&#xff0c;具有一定的普適性&#xff0c;可以從大局上了解collection實現類的主要功能。 java.util.AbstractCollection這個類提供了對接口Collection骨骼級的實現。 一、源碼解析 1、iterator():返回一個迭…

溝通linux與windows的wine

據Netcraft網站調查&#xff0c;現在互聯網上的主機有75&#xff05;以上采用Linux作為操作系統。作為服務器操作系統&#xff0c;Linux已經站穩了腳步&#xff0c;可是在桌面 操作系統上&#xff0c;還是微軟的“瘟到死”一支獨秀。這倒不是說Linux不好&#xff0c;很大原因我…

備份spfil、控制文件等

delete backup&#xff1b; delete backupset delete noprompt backup backup keep forver database 永久保存恢復目錄中支持此命令 show parameter control 備份spfile backup spfile backup current contrlfile configure controlfile autoback …

日常問題——阿里云服務器ssh經常一段時間就斷掉解決辦法

#vim /etc/ssh/sshd_config 找到下面兩行 #ClientAliveInterval 0 #ClientAliveCountMax 3 去掉注釋&#xff0c;改成 ClientAliveInterval 30 ClientAliveCountMax 86400 這兩行的意思分別是 1、客戶端每隔多少秒向服務發送一個心跳數據 2、客戶端多少秒沒有相應&#…

在Ubuntu 8.04 LTS(hardy)下安裝配置nginx和fastcgi方式的php

最近我們(瑞豪開源Xen VPS: http://www.RasHost.com)的一個客戶要求在他的Ubuntu 8.04 VPS上安裝一個高性能的nginx&#xff0c;下面是我的安裝記錄。 由于Ubuntu 804已經包含了nginx&#xff0c;所以根本不要編譯&#xff0c;安裝超簡單&#xff01; 在VPS上修改/etc/apt/so…

apt-get包管理詳解

apt-get使用source.list文件進行軟件包管理。如果您想了解關于如何編輯和更新source.list中的條目的信息&#xff0c;請參閱SourcesList“起初GNU/Linux系統中只有.tar.gz。用戶必須自己編譯他們想使用的每一個程序。在Debian出現之後&#xff0c;人們認為有必要在系統中添 加一…

awk命令

awk是一個強大的文本分析工具&#xff0c;相對于grep的查找&#xff0c;sed的編輯&#xff0c;awk在其對數據分析并生成報告時&#xff0c;顯得尤為強大。簡單來說awk就是把文件逐行的讀入&#xff0c;以空格為默認分隔符將每行切片&#xff0c;切開的部分再進行各種分析處理。…

ubuntu安裝字符集

sudo locale-gen zh_CN.GBK sudo locale-gen zh_CN

正則表達式和grep

正則表達式(regular expression, RE)是一種字符模式&#xff0c;用于在查找過程中匹配指定的字符。 在大多數程序里&#xff0c;正則表達式都被置于兩個正斜杠之間;例如/lv[o0]e/就是由正斜杠界定的正則表達式&#xff0c;它將匹配被查找的行中任何位置出現的相同模式。在正則表…

GC 垃圾回收

垃圾回收機制是由垃圾收集器Garbage Collection GC來實現的&#xff0c;GC是后臺的守護進程。它的特別之處是它是一個低優先級進程&#xff0c;但是可以根據內存的使用情況動態的調整他的優先級。因此&#xff0c;它是在內存中低到一定限度時才會自動運行&#xff0c;從而實現對…