久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql中如何設置編碼

148次閱讀
沒有評論

共計 4136 個字符,預計需要花費 11 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關 mysql 中如何設置編碼,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

1、文件編碼:指的是頁面文件 (.html,.php 等) 本身是以何種編碼來保 存的。記事本和 Dreamweaver 在打開頁面時候會自動識別文件編碼因而不太會出問題。而 ZendStudio 卻不會自動識別編碼,它只會根據首選項 的配置固定以某種編碼打開文件,如果工作時候一不注意,用錯誤編碼打開文件,做了修改之后一保存,亂碼就出現了。

2、頁面申明編碼:在 HTML 代碼 HEAD 里面,可以用 meta http-equiv= Content-Type content= text/html; charset= XXX /(這句一定要寫在 title XXX /title 前面,否則會導致頁面一片空白(僅限 IE+PHP))來告訴瀏 覽器網頁采用了什么編碼,目前中文網站開發中主要用的是 GB2312 和 UTF- 8 兩種編碼。

3、數據庫連接編 碼:指的是進行數據庫操作時候以哪種編碼與數據庫傳輸數據,這里需要注意的是不要與數據庫本身的編碼混淆,比如 MySQL 內部默認是 latin1 編碼,也 就是說 Mysql 是以 latin1 編碼來存儲數據,以其他編碼傳輸給 Mysql 的數據會被轉換成 latin1 編碼。(新版本的 mysql 4.1 以上應該以 utf- 8 編碼存儲)

知道了 WEB 開發中哪些地方涉及到了編碼,也就知道了亂碼產生的原因:上述 3 項編碼設置不一致,由于各種編碼絕大部分是兼容 ASCII 的,所以英文符號不會出現,中文就倒霉了。下面是一些常見的錯誤情況與解決:

1、數據庫采用 UTF8 編碼,而頁面申明編碼是 GB2312,這是最常見的產生亂碼的原因。這時候在 PHP 腳本里面直接 SELECT 數據出來的就是亂碼,需要在查詢前先使用:

mysql_query(SET NAMES GBK 或 mysql_query( SET NAMES GB2312 來設定 MYSQL 連接編碼,保證頁面申明編碼與這里設定的連接編碼一致(GBK 是 GB2312 的擴展)。如果頁面是 UTF- 8 編碼的 話,可以用:

mysql_query(SET NAMES UTF8 注意是 UTF8 而不是一般用的 UTF-8。假如頁面申明的編碼與數據庫內部編碼一致可以不設定連接編碼。
注:事實上 MYSQL 的數據輸入輸出比上面講的更復雜一些,MYSQL 配置文件 my.ini 中定義了 2 個默認編碼,分別是 [client] 里的 default-character-set 和 [mysqld] 里的 default-character-set 來分別設定默認時候客戶端連接和數據庫內 部所采用的編碼。我們上面指定的編碼其實是 MYSQL 客戶端連接服務器時候的命令行參數 character_set_client,來告訴 MYSQL 服務 器接受到的客戶端數據是什么編碼的,而不是采用默認編碼。

2、頁面申明編碼與文件本身編碼不一致,這種情況很少發生,因為如果編碼不一致美工做頁面時候在瀏覽器看到的就是亂碼了。更多時候是發布以后修改一些小 BUG,以錯誤編碼打開頁面然后保存導致的。或者是用某些 FTP 軟件直接在線修改文件,比如 CuteFTP,由于軟件編碼配置錯誤而導致轉換錯了編碼。

3、一些租用虛擬主機的朋友,明明上述 3 項編碼都設置正確了還是有亂碼。比方說網頁是 GB2312 編碼的,IE 等瀏覽器打開卻總是識別成 UTF-8,網頁 HEAD 里面已經申明是 GB2312 了,手動修改瀏覽器編碼為 GB2312 后頁面顯示正常。產生原因是服務器 Apache 設定了服務器全局的默認編碼,在 httpd.conf 里面加了 AddDefaultCharset UTF-8。這時候服務器會首先發送 HTTP 頭給瀏覽器,其優先級比頁面里申明編碼高,自然瀏覽器就識別錯了。解決辦法有 2 個,請管理員在配置文件自己的 虛機里加上一條 AddDefaultCharset
GB2312 來覆蓋全局配置,或者在自己目錄的.htaccess 里配置。

亂碼解決方法

要解決亂碼問題,首先必須弄清楚自己數據庫用什么編碼。如果沒有指明,將是默認的 latin1。
我們用得最多的應該是這 3 種字符集 gb2312,gbk,utf8。
那么我們如何去指定數據庫的字符集呢?下面也 gbk 為例
【在 MySQL Command Line Client 創建數據庫】
mysql CREATE TABLE `mysqlcode` (
– `id` TINYINT(255) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
– `content` VARCHAR(255) NOT NULL
– ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql desc mysqlcode;
+———+———————–+——+—–+———+—————-+
| Field  | Type  | Null | Key | Default | Extra  |
+———+———————–+——+—–+———+—————-+
| id  | tinyint(255) unsigned | NO  | PRI |  | auto_increment |
| content | varchar(255)  | NO  |  |  |  |
+———+———————–+——+—–+———+—————-+
2 rows in set (0.02 sec)

其中后面的 TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定數據庫的字符集,COLLATE (校勘),讓 mysql 同時支持多種編碼的數據庫。
當然我們也可以通過如下指令修改數據庫的字符集
alter database da_name default character set charset .
客戶端以 gbk 格式發送,可以采用下述配置:
SET character_set_client= gbk
SET character_set_connection= gbk
SET character_set_results= gbk
這個配置就等價于 SET NAMES gbk。
現在對剛才創建的數據庫操作
mysql use test;
Database changed
mysql insert into mysqlcode values(null, php 愛好者
ERROR 1406 (22001): Data too long for column content at row 1
沒有指定字符集為 gbk,插入時出錯
mysql set names gbk
Query OK, 0 rows affected (0.02 sec)
指定字符集為 gbk
mysql insert into mysqlcode values(null, php 愛好者
Query OK, 1 row affected (0.00 sec)

插入成功

mysql select * from mysqlcode;
+—-+———–+
| id | content  |
+—-+———–+
| 1 | php 愛好著 |
+—-+———–+
1 row in set (0.00 sec)

在沒有指定字符集 gbk 時讀取也會出現亂碼,如下

mysql select * from mysqlcode;
+—-+———+
| id | content |
+—-+———+
| 1 | php??? |
+—-+———+
1 row in set (0.00 sec)

【在 phpmyadmin 創建數據庫, 并指定字符集】

表類型根據自己需要選,這里選 MyISAM(支持全文檢索);
整理選擇 gbk_chinese_ci 也就是 gbk 字符集
gbk_bin 簡體中文, 二進制。gbk_chinese_ci 簡體中文, 不區分大小寫。

在剛才創建的數據庫插入數據庫

再瀏覽時發現是亂碼

為什么呢?是因為數據庫為 gbk 字符集,而我們操作時沒有指定為 gbk
回到數據庫首頁

可以看到 mysql 連接校對默認的 latin1_bin。我們將其改為 gbk_chinese_ci

再插入一條數據。看,這條已經正常了

【解決 php 讀取數據庫亂碼】

仍以數據庫 mysqlcode 為例
?php
$conn = mysql_connect(localhost , root , 89973645
mysql_query(set names gbk // 這就是指定數據庫字符集,一般放在連接數據庫后面就系了
mysql_select_db(test

$sql = select * from mysqlcode
$result = mysql_query($sql,$conn);

?
head
meta http-equiv= Content-Type content= text/html; charset=gb2312 /
title mysql 字符編碼 /title
/head

body
table width= 300 height= 32 border= 1 align= center cellpadding= 0 cellspacing= 0

tr
td width= 71 align= center id /td
td width= 229 align= center 內容 /td
/tr
?php while($row = mysql_fetch_assoc($result)){
echo  
tr
td align=\ center\ .$row[id]. /td
td .$row[content]. /td
/tr
}?  
/table
/body
/html
?php mysql_free_result($result);?
如果我們將 mysql_query(set names gbk 注釋掉,肯定時亂碼

關于 mysql 中如何設置編碼就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計4136字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 保靖县| 江达县| 页游| 邹城市| 志丹县| 安新县| 南开区| 胶南市| 东莞市| 长垣县| 东海县| 佛山市| 睢宁县| 靖边县| 朝阳县| 临漳县| 明水县| 乌鲁木齐县| 望谟县| 定结县| 南城县| 延吉市| 广饶县| 吉木萨尔县| 翁牛特旗| 蓝山县| 泸州市| 临夏市| 白玉县| 新河县| 晋宁县| 当涂县| 忻州市| 绍兴市| 普定县| 锡林浩特市| 时尚| 湖北省| 武宁县| 当涂县| 濮阳县|