成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP存取MySQL 數(shù)據(jù)亂碼的破解

數(shù)據(jù)庫 MySQL
此文章主要向大家描述的是PHP存取MySQL 數(shù)據(jù)亂碼的實際解決方法,以及在實際操作中有哪些的具體事項是值得我們大家注意的。

以下的文章主要向大家介紹的是PHP存取MySQL 數(shù)據(jù)亂碼的實際解決方法我們大家都知道MySQL 數(shù)據(jù)中出現(xiàn)亂碼是一件令人十分頭痛的的事情,那么到底對其如何解決呢?以下的文章就有解答。

對PHP和MySQL 的研究并不深入,以下是我的一些個人心得,說的可能不是很明白,但確實是很管用的東西。

 

我的Discuz版本是UTF-8的,但是打開phpmyadmin顯示的是 整理欄目:gbk_chinese_ci ,而且查看數(shù)據(jù)顯示完全正常,沒有亂碼,這個表示,實際 discuz在存取數(shù)據(jù)庫用的是 gbk編碼,但頁面顯示確實UTF-8編碼阿,怎么沒有MySQL 數(shù)據(jù)亂碼呢?難道Discuz做了編碼轉(zhuǎn)換。

 

最近在公司開發(fā)一個網(wǎng)站,由于用到了 cakephp框架 ,默認(rèn)編碼為UTF-8,而且我的計算機是Ubuntu,通常用的都是UTF-8編碼,所寫的程序頁面也都是UTF-8編碼的文件,自然想到用UTF-8編碼的數(shù)據(jù)庫,這個問題可把我苦大了。

按照一般網(wǎng)上的說法是建立數(shù)據(jù)庫表的時候加上 DEFAULT CHARSET UTF8 ,創(chuàng)建的表的整理欄目在phpmyadmin里面顯示的 是 utf8_general_ci ,在執(zhí)行sql 語句是加上“set names utf8”,這樣就會正常了,插入的數(shù)據(jù)在頁面里面顯示完全正常,我的頁面是 設(shè)置了UTF-8編碼的 ,<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 。

按理說應(yīng)該沒有什么問題的,但是在Phpmyadmin里面顯示的確是MySQL 數(shù)據(jù)亂碼,而且如果我在phpmyadmin里面修改了一個數(shù)據(jù),在phpmyadmin里面顯示就是正常了,但是到頁面顯示卻亂碼了,于是我想?yún)⒖家幌耫iscuz的做法在phpmyadmin里面強行把表和所有的char,varchar 和 text 字段改為gbk_chinese_ci ,修改后,phpmyadmin 里面正常了,但是到頁面顯示確是MySQL 數(shù)據(jù)亂碼了,公司原來的數(shù)據(jù)庫是 ms-sql server 2000 的現(xiàn)在要導(dǎo)入到 MySQL5,原來的 兩個漢字在導(dǎo)入到 char(10)的時候 竟然報錯說是字符太長了,怎么可能呢?

一個字符按照UTF16也就4個字節(jié) 最多才到8個字節(jié)阿怎么回事阿?網(wǎng)上有人說是由于編碼不當(dāng)可能會把UTF8的編碼經(jīng)過兩次轉(zhuǎn)換 變成一個漢字6個字節(jié)存儲,具體是怎么回事我也不清楚,不過后來經(jīng)過多次實驗終于明白了原來MySQL存取編碼和查詢編碼并不一致,需要手動指定,也可以在 MySQL 的配置文件里指定編碼網(wǎng)上有人的解決辦法是:

 

PHP源文件使用的是UTF-8編碼 MySQL 存儲用的是GBK編碼

  1. set character_set_client = utf8;  

指明也即php程序發(fā)往數(shù)據(jù)庫的SQL語句使用的是UTF8編碼,如insert;

  1. set character_set_connection = GBK;  

指明數(shù)據(jù)庫收到SQL語句之后應(yīng)當(dāng)將其從character_set_client轉(zhuǎn)碼為

utf8格式進行操作,如insert。(若沒有這一句,插入的數(shù)據(jù)將變成問號)

  1. set character_set_results = utf8;  

指明數(shù)據(jù)庫查詢完畢之后應(yīng)當(dāng)以何種編碼返回給調(diào)用端,如select。

現(xiàn)在***解決辦法,php 文件為UTF-8時的做法:在所有執(zhí)行MySQL_query函數(shù)做數(shù)據(jù)庫插入刪除查詢之前 執(zhí)行下面三個命令:

  1. MySQL_query('set character_set_client = utf8');  
  2. MySQL_query('set character_set_connection = GBK');  
  3. MySQL_query('set character_set_results = utf8');  

而不是以前的 set names utf8命令創(chuàng)建數(shù)據(jù)庫和創(chuàng)建表之時指定編碼為gbk ,指定 整理為:

  1. gbk_chinese_ci;  
  2. CREATE DATABASE `test` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;  

這樣你的網(wǎng)站永遠(yuǎn) 都不會有MySQL 數(shù)據(jù)亂碼問題了而且如果有一個字段是 username char(20),這樣就可以插入20個漢字,而不是20/2或者 20/3之類如果插入的是20個漢字, select length(username)查看 會返回 40 ,也就是說,MySQL 實際是用40個字符存儲的但是我們不用去管他實際的存儲,你想要限制多少就直接是指定char()多少就可以了,漢字和英文同樣對待。

 【編輯推薦】

  1. MySQL編碼機制與亂碼
  2. PHP和MySQL存儲過程的實例演示
  3. 解決MySQL無法遠(yuǎn)程訪問的3方案
  4. 甲骨文對MySQL數(shù)據(jù)庫做出十大承諾!
  5. 解決MySQL遠(yuǎn)程訪問不允許得個好用方案
責(zé)任編輯:佚名 來源: cnblogs
相關(guān)推薦

2010-06-09 16:46:37

MySQL 亂碼處理

2010-06-02 10:19:49

2010-05-31 16:57:09

2009-12-10 10:49:21

PHP eval加密

2009-02-25 15:39:15

亂碼原理MySQL

2009-11-30 11:10:12

PHP顯示MySQL亂

2010-06-04 15:57:03

PHP+MYSQL

2011-05-23 09:51:30

MySQL

2009-12-24 16:20:19

Linux破解PHP

2010-06-04 19:24:15

重裝MySQL數(shù)據(jù)庫

2010-05-31 18:33:00

MySQL中文亂碼

2010-10-08 11:41:38

PHP連接MYSQL

2009-12-09 13:54:42

PHP Zend加密文

2010-05-27 18:44:14

MySQL遠(yuǎn)程連接

2010-06-10 15:44:53

2010-06-07 09:22:21

MySQL+PHP亂碼

2009-11-30 11:01:20

MySQL與PHP產(chǎn)生

2010-06-07 13:00:34

MySQL數(shù)據(jù)庫

2011-05-16 10:31:19

mysql亂碼

2009-05-07 11:30:28

Oracle掃描數(shù)據(jù)索引
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久久久久久99 | 久久久久久免费观看 | 成人国产精品久久久 | 91高清免费观看 | 噜久寡妇噜噜久久寡妇 | 男人的天堂中文字幕 | 成年免费大片黄在线观看一级 | 国产精品完整版 | 欧美一区二区在线看 | 成人免费视频网站 | 中文字幕一区在线观看视频 | 久久久久国产精品一区三寸 | 国产成人一区二区三区 | 丁香婷婷成人 | 在线欧美日韩 | 91精品国产综合久久久久久 | 成人做爰69片免费观看 | 欧美精品综合在线 | 91中文字幕在线 | 色婷婷激情 | 成人精品国产免费网站 | 欧美八区| 久久国产精品偷 | 成人国产精品久久久 | 欧美一级黄带 | 中文字幕电影在线观看 | 日韩视频免费 | 日本又色又爽又黄又高潮 | 精品久久精品 | 国产在线二区 | 国产精品亚洲综合 | 中文字幕综合 | 久草网址| 91就要激情| 国产精品久久久久久久久久免费 | www国产亚洲精品久久网站 | 国产精品二区三区在线观看 | 成年人在线观看视频 | av一二三四 | 国产一区二区三区免费 | 亚洲三级av|