重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
數據庫的編碼是 gbk 的,在查詢的時候把中文(utf-8)轉換成 gbk編碼就可以了
創新互聯公司主營昭蘇網站建設的網絡公司,主營網站建設方案,手機APP定制開發,昭蘇h5成都小程序開發搭建,昭蘇網站營銷推廣歡迎昭蘇等地區企業咨詢
$nickname=iconv('utf-8','gbk//TRANSLIT',$nickname);
轉換后才執行查詢
1、要么頁面原始漢字和從數據庫里取出的漢字全是亂碼;
2、要么原始漢字和數據庫漢字,一個顯示正常了,另一個就變成亂碼了。
問題需要一步一步的解決。在實際操作以下方法之前,需要配置 Web 服務器,使其與 PHP 集成,最終可以調試 PHP 程序。我們以常見的 GB2312 和 UTF-8 字符集為例來測試和說明。瀏覽器是 IE7.0。
1、頁面原始漢字亂碼的解決
解決這個問題就需要使用 UltraEdit 的這個功能。
1.1 打開中文 Windows,用 UltraEdit 創建一個文本文件,手工輸入一個 PHP 頁面文件,文件內容如下。保存為 test1.php 文件,注意保存時“格式”下拉框選擇“默認”- 特別注意這里。
確保三碼合一就可以了..
第一個是數據庫的字符集
第二個就是存進去的時候字符集
第三個就是顯示的時候的字符集
這三個都有可能造成亂碼;
第一個 舉例是:如果你插入的時候用的是GB2312 ,但你表中的default charset是utf8 那么,就有可能亂碼了.
第二種情況就是你插入正確 但你查詢的時候以UTF8查詢出來,但你在HTML頁面里設置編碼如果非UTF8那么也有可能造成亂碼.
數據庫使用utf8編碼,需要在操作的過程中統一全部編碼。
1.數據庫默認編碼
CREATE?DATABASE?`test`?DEFAULT?CHARACTER?SET?'utf8';
2.表默認編碼
CREATE?TABLE?`tablea`(
`id`?INT?NOT?NULL?AUTO_INCREMENT,
`title`?VARCHAR(100)?NULL,
)ENGINE=InnoDB?DEFAULT?CHARSET=utf8;
3.字段默認編碼
默認情況下,字段的編碼同表的編碼,但是如果修改了表的編碼,字段編碼不會同步修改,需要手動修改
這里修改編碼測試我將utf8 改為 gb2312? ,僅用于觀察修改后的情況(實際使用中可能是將gbk修改為utf8)
ALTER?TABLE?`test`.`tablea`?CHARACTER?SET?=?gb2312?;
--?修改表編碼后,查看建表語句
show?create?table?`tablea`;
--?可以看到輸出的建表語句中字段單獨設置了編碼
CREATE?TABLE?`tablea`(
`id`?INT?NOT?NULL?AUTO_INCREMENT,
`title`?VARCHAR(100)?CHARACTER?SET?utf8?NULL,
)ENGINE=InnoDB?DEFAULT?CHARSET=gb2312;
--?需要手動修改字段編碼
ALTER?TABLE?`tablea`?
CHANGE?COLUMN?`title`?`title`?VARCHAR(100)?CHARACTER?SET?'gb2312'?NULL?DEFAULT?NULL?;
4.當前數據庫連接的編碼
連接數時設置編碼
//?PDO?連接
$db?=?new?PDO('mysql:host=myhost;dbname=test',?'login',?'password',?
array(PDO::MYSQL_ATTR_INIT_COMMAND?=?'SET?NAMES?\'UTF8\'')
);?
//?mysqli連接
$link?=?mysqli_connect("127.0.0.1",?"my_user",?"my_password",?"test");
mysqli_query($link,"SET?NAMES?'utf8';");
通過以上幾步操作,基本可以保證數據庫使用過程中不會出現亂碼