phpmysql設置編碼
也許是資料庫的問題,我也遇到過,我用的是wampserver,界面的工具,直接點滑鼠就可能建成mysql資料庫,建成後導入數據,查詢資料庫返回面而的是亂碼,我遇到的情況是這樣的:
1、建庫用gbk,如圖。
2、導入表及數據時,默認是utf,此處要改成gbk就不是亂碼了,如第圖底頁面,如果是默認的或是其它的字元集,能導入成功但是亂碼。另外直接把sql粘貼到sql窗口,也不是亂碼。
希望能幫到你,呵呵~
B. 在 PHP和mysql中怎樣設置編碼想設置為一致的。
在建資料庫的時候在整理選gb2312_chinese_cihtml頁面設置編碼為gb2312或者gbk連接資料庫時設置編碼mysql_query("set names 'GBK'");或者mysql_query("set names 'GB2312'");
C. php腳本連接mysql的時候,最初發送的數據是如何設定編碼方式的 ...
連接時的字元集是在資料庫那邊的默認設置的,你可以在資料庫上執行一下 show variables like "%char%";在php里也可以修改:mysql_query("set names utf8");
D. php怎麼設置編碼
header("Content-type: text/html; charset=utf-8");
另外你的編輯器編碼也要對應哦
a. 如果欲使用gb2312編碼,那麼php要輸出頭:header(「Content-Type: text/html; charset=gb2312"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的編碼格式為ANSI,可用記事本打開,另存為選擇編碼為ANSI,覆蓋源文件。
b. 如果欲使用utf-8編碼,那麼php要輸出頭 :header(「Content-Type: text/html; charset=utf-8"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的編碼格式為utf-8。
最近需要用到iconv函數把抓取來過的utf-8編碼的頁面轉成gb2312, 發現只有用iconv函數把抓取過來的數據一轉碼數據就會無緣無故的少一些。 讓我郁悶了好一會兒,去網上一查資料才知道這是iconv函數的一個bug。iconv在轉換字元"—"到gb2312時會出錯。解決方法很簡單,就是在 需要轉成的編碼後加 "//IGNORE" 也就是iconv函數第二個參數後,如下:
iconv("UTF-8","GB2312//IGNORE",$data)
ignore的意思是忽略轉換時的錯誤,如果沒有ignore參數,所有該字元後面的字元串都無法被保存。
E. php的mysql怎麼設置編碼類型utf-8
header("Content-type: text/html; charset=utf-8"); 另外你的編輯器編碼也要對應哦 a. 如果欲使用gb2312編碼,那麼php要輸出頭:header(「Content-Type: text/html; charset=gb2312"),靜態頁面添加,所有文件的編碼格式為ANSI,可用記事本打開...
F. php文件和mysql資料庫編碼問題
文件編碼需要做到三個編碼一致,如果你做到以下三個編碼一致就永遠不會出現亂碼了!!!!!
(1)資料庫編碼
資料庫編碼注意的是資料庫表欄位的編碼和資料庫客戶端編碼,比如表欄位的編碼是UTF-8,操作資料庫PHP文件編碼是GB2312, 怎樣才不會出現亂碼呢?這個時候就要用SET NAMES GB2312來設置資料庫伺服器的客戶端的編碼,這樣資料庫伺服器就會自動將資料庫中編碼為UTF-8的數據自動轉化為GB2312,在接收的PHP文件就保證收到的數據不會有亂碼
(2)PHP文件編碼
也就是你在保存文件時選擇的文件編碼,如果不是當前你想要的編碼可以通過「另存為」改變編碼
(3)HTML中<meta http-equiv="content-type" content="text/html;charset=gb2312"/>設置客戶端瀏覽器顯示數據的編碼,其本質是設置HTTP中Content-Type報頭的值,PHP中要做到這一點可以用 header("content-type:text/html;charset=gb2312")
做到上面各編碼一致的編碼一致,不會出現亂碼的!!
G. 用php建mysql表時怎麼設置表的編碼為gb2312
可以使用 DEFAULT CHARSET=gb2312 設置編碼。
例如:
創建一個名字為table的表,編碼為gb2312。
CREATE TABLE IF NOT EXISTS `table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`contents` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1 ;
建議最好使用utf8編碼,這樣兼容性更好。
H. php+mysql編碼問題
資料庫表建立的時候,字元欄位有字元集,關鍵看是選擇的GB2321、UTF8等。以這個為基礎,以下的幾個地方都保持統一,那麼數據才能插入和查詢,而且不會有亂碼:
一、PHP文件的編碼,PHP實際上是文本文件,保存的時候是可以選擇編碼的,你用記事本打開選擇另存為就可以看見,如果是ANSI就和前面資料庫的GB2312、GBK兼容,UTF8就和UTF8一致。
二、PHP運行後瀏覽器頁面的編碼,這個也必須要一致。
三、PHP程序連接資料庫之後,要運行下面的語句設置介面編碼:輸入mysql_query('set names gb2312');
第三條應該就是你要的答案了。
我是這么寫的
<?php
$link=mysql_connectlocalhost","root","root");
mysql_select_db('table',$link);
mysql_query('set names gb2312');
?>
每個涉及到庫的文件都會先 include 這個文件,這樣就不必怕忘記編碼了~
I. php創建mysql數據表,怎麼選擇UTF8字元集
一、轉碼失敗
在數據寫入到表的過程中轉碼失敗,資料庫端也沒有進行恰當的處理,導致存放在表裡的數據亂碼。
針對這種情況,前幾篇文章介紹過客戶端發送請求到服務端。
其中任意一個編碼不一致,都會導致表裡的數據存入不正確的編碼而產生亂碼。
比如下面簡單一條語句:
set @a = "文本字元串";
insert into t1 values(@a);
變數 @a 的字元編碼是由參數 CHARACTER_SET_CLIENT 決定的,假設此時編碼為 A,也就是變數 @a 的編碼。
2. 寫入語句在發送到 MySQL 服務端之前的編碼由 CHARACTER_SET_CONNECTION 決定,假設此時編碼為 B。
3. 經過 MySQL 一系列詞法,語法解析等處理後,寫入到表 t1,表 t1 的編碼為 C。
那這里編碼 A、編碼 B、編碼 C 如果不兼容,寫入的數據就直接亂碼。
二、客戶端亂碼
表數據正常,但是客戶端展示後出現亂碼。
這一類場景,指的是從 MySQL 表裡拿數據出來返回到客戶端,MySQL 里的數據本身沒有問題。客戶端發送請求到 MySQL,表的編碼為 D,從 MySQL 拿到記錄結果傳輸到客戶端,此時記錄編碼為 E(CHARACTER_SET_RESULTS)。
那以上編碼 E 和 D 如果不兼容,檢索出來的數據就看起來亂碼了。但是由於數據本身沒有被破壞,所以換個兼容的編碼就可以獲取正確的結果。
這一類又分為以下三個不同的小類:
1)欄位編碼和表一致,客戶端是不同的編碼
比如下面例子, 表數據的編碼是 utf8mb4,而 SESSION 1 發起的連接編碼為 gbk。那由於編碼不兼容,檢索出來的數據肯定為亂碼。
2)表編碼和客戶端的編碼一致,但是記錄之間編碼存在不一致的情形
比如表編碼是 utf8mb4,應用端編碼也是 utf8mb4,但是表裡的數據可能一半編碼是 utf8mb4,另外一半是 gbk。那麼此時表的數據也是正常的,不過此時採用哪種編碼都讀不到所有完整的數據。這樣數據產生的原因很多,比如其中一種可能性就是表編碼多次變更而且每次變更不徹底導致(變更不徹底,我之前的篇章里有介紹)。舉個例子,表 t3 的編碼之前是 utf8mb4,現在是 gbk,而且兩次編碼期間都被寫入了正常的數據。
3)每個欄位的編碼不一致,導致亂碼和第二點一樣的場景。不同的是:非記錄間的編碼不統一,而是每個欄位編碼不統一。舉個例子,表 c1 欄位 a1,a2。a1 編碼 gbk,a2 編碼是 utf8mb4。那每個欄位單獨讀出來數據是完整的,但是所有欄位一起讀出來,數據總會有一部分亂碼。
三、LATIN1
還有一種情形就是以 LATIN1 的編碼存儲數據
估計大家都知道字元集 LATIN1,LATIN1 對所有字元都是單位元組流處理,遇到不能處理的位元組流,保持原樣,那麼在以上兩種存入和檢索的過程中都能保證數據一致,所以 MySQL 長期以來默認的編碼都是 LATIN1。這種情形,看起來也沒啥不對的點,數據也沒亂碼,那為什麼還有選用其他的編碼呢?原因就是對字元存儲的位元組數不一樣,比如 emoji 字元 "❤",如果用 utf8mb4 存儲,佔用 3 個位元組,那 varchar(12) 就能存放 12 個字元,但是換成 LATIN1,只能存 4 個字元。
J. php訪問mysql資料庫時,讀出的數據是問號!如何解決,設置的編碼方式是utf-8
兩邊入手,
PHP,需要設置頁面編碼,加一行代碼:
header('Content-Type:text/html;charset=utf-8');
這樣就把輸出編碼改為了UTF-8
但是,MySQL也要設置,那就是連接到資料庫之後再加一行
mysql_query("SET
NAMES
`UTF-8`");
即可
當然,你得保證你的資料庫的字元集是UTF-8
如果仍然出錯,那就說明資料庫的字元集配置有問題