青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
數(shù)據(jù)加載中……

mysql字符集調(diào)整的個(gè)人總結(jié)

sql4.1以后版本都支持多字符集的支持,但是安裝默認(rèn)的字符集竟然是 latin1這個(gè)瑞典文,所以很多人想安裝discuz等論壇為gbk、utf-8等字符集的論壇就出現(xiàn)了一些問題。最近我在網(wǎng)上找了一些資料,加上自己又專門在一臺(tái)linux服務(wù)器上試驗(yàn)了兩天的經(jīng)歷,基本解決了字符集的問題,現(xiàn)將我的心得寫出來,供廣大網(wǎng)游參考。

    
一、原理篇:
           
             mysql
服務(wù)器中有六個(gè)關(guān)鍵位置使用了字符集的概念,他們是:client 、connection、databaseresults、server 、system

             a
、其中client是客戶端使用的字符集,相當(dāng)于網(wǎng)頁中的字符集設(shè)置如下

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       b
、其中的connection是連接數(shù)據(jù)庫(kù)的字符集設(shè)置類型,如果php沒有指明連接數(shù)據(jù)庫(kù)使用的字符集類型
就按照服務(wù)器端默認(rèn)的字符集設(shè)置。
       c
、其中database是數(shù)據(jù)庫(kù)服務(wù)器中某個(gè)庫(kù)使用的字符集設(shè)定,如果建庫(kù)時(shí)沒有指明,將使用服務(wù)器安裝
時(shí)指定的字符集設(shè)置。
       d
、results是數(shù)據(jù)庫(kù)給客戶端返回時(shí)使用的字符集設(shè)定,如果沒有指明,使用服務(wù)器默認(rèn)的字符集。
       e
、server是服務(wù)器安裝時(shí)指定的默認(rèn)字符集設(shè)定。
       f
、system是數(shù)據(jù)庫(kù)系統(tǒng)使用的字符集設(shè)定。
     
      system
一般默認(rèn)是utf-8字符集,server是最高的字符集設(shè)定,database沒有單獨(dú)設(shè)定就按照server的字符
集設(shè)定,其他都是按照server的設(shè)定設(shè)置字符集。還有,數(shù)據(jù)庫(kù)內(nèi)的每個(gè)表和字段也都有字符集的概念,一般都
是根據(jù)上一級(jí)結(jié)構(gòu)決定自身的字符集,比如表就根據(jù)database庫(kù)的設(shè)定決定自己的字符集,字段根據(jù)表來決定自己
的字符集。

  
二、統(tǒng)一字符集的方法:(以utf-8字符集為例,因?yàn)樗悄壳爸С治淖址N類最廣的字符集)

      1
、徹底解決字符集的方法:

      
要徹底解決字符集的方法就是讓mysql在安裝的時(shí)候就是用utf-8的字符集設(shè)定,這樣可以使上面的六個(gè)關(guān)鍵
點(diǎn)的編碼都為utf-8

      a
、 在windows下安裝mysql有提示可以選擇字符集,我們選擇utf-8就可以了。

      b
、在linux下有三種安裝方法,第一種是rpm包安裝,這種因?yàn)槲覜]有使用過所以沒有發(fā)言權(quán)。

        
第二種為可執(zhí)行程序安裝,這種安裝因?yàn)橐呀?jīng)被編譯成了latin1這種瑞典語的字符集,所以無法完全解決字
符集問題,這個(gè)版本我們后面會(huì)講到怎么解決字符集問題。
        
第三種為源碼自行編譯安裝,這種安裝可以在編譯時(shí)設(shè)置字符集類型,這部分主要講這種安裝方式。

       
在編譯mysql是我們可以用這樣的指令:./configure --default-character-set=utf8
這樣,在編譯的時(shí)候,就會(huì)把mysqlserver項(xiàng)編譯成utf8的編碼,這樣這個(gè)mysql下建立的所有數(shù)據(jù)庫(kù)都將使用utf8
編碼存儲(chǔ),所有有關(guān)的方面都是utf8編碼。


      2
、局部堅(jiān)決字符集的方法:
 
       
如果遇到自己的數(shù)據(jù)庫(kù)使用的是默認(rèn)安裝的latin1字符集的(很奇怪為什么mysql要使用這么個(gè)默認(rèn)字符集)
的情況我們可以這樣來解決。

       a
、默認(rèn)請(qǐng)況下我們?cè)?/span>mysql命令行使用status指令察看狀態(tài),可以看到如下內(nèi)容:

        mysql> status
--------------
mysql  Ver 14.7 Distrib 4.1.9, for pc-linux-gnu (i686)

Connection id:          62
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.1.11-beta-log
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /tmp/mysql.sock
Uptime:                 58 min 23 sec

Threads: 2  Questions: 1067  Slow queries: 0  Opens: 0  Flush tables: 1  Open tables: 75  Queries per second avg: 0.305
--------------

        
還可以用SHOW VARIABLES LIKE 'character_set_%';指令察看內(nèi)容如下:

+--------------------------+---------------------------------------------------------------------------+
| Variable_name            | Value                                                                     |
+--------------------------+---------------------------------------------------------------------------+
| character_set_client     | latin1                                                                    |
| character_set_connection | latin1                                                                    |
| character_set_database   | latin1                                                                    |
| character_set_filesystem | binary                                                                    |
| character_set_results    | latin1                                                                    |
| character_set_server     | latin1                                                                    |
| character_set_system     | utf8                                                                      |
| character_sets_dir       | /usr/local/src/mysql-5.1.11-beta-linux-i686-glibc23/share/mysql/charsets/ |
+--------------------------+---------------------------------------------------------------------------+
8 rows in set (0.00 sec)

         
這就說明,除systemutf8之外的所有內(nèi)容的字符集都為latin1,我們?cè)趺礃硬拍苁褂?/span>utf字符集呢?
有人說可以在my.cnf文件的[mysqld]段中加入default-character-set=utf8這一項(xiàng)就可以解決,但經(jīng)過我的實(shí)驗(yàn),這一條
完全沒有必要,以下是增加了這一項(xiàng)后得顯示結(jié)果。

mysql> status;
--------------
mysql  Ver 14.7 Distrib 4.1.9, for pc-linux-gnu (i686)

Connection id:          62
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.1.11-beta-log
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    latin1
UNIX socket:            /tmp/mysql.sock
Uptime:                 1 hour 6 min 18 sec

Threads: 2  Questions: 1071  Slow queries: 0  Opens: 0  Flush tables: 1  Open tables: 75  Queries per second avg: 0.269
--------------

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+---------------------------------------------------------------------------+
| Variable_name            | Value                                                                     |
+--------------------------+---------------------------------------------------------------------------+
| character_set_client     | latin1                                                                    |
| character_set_connection | latin1                                                                    |
| character_set_database   | utf8                                                                      |
| character_set_filesystem | binary                                                                    |
| character_set_results    | latin1                                                                    |
| character_set_server     | utf8                                                                      |
| character_set_system     | utf8                                                                      |
| character_sets_dir       | /usr/local/src/mysql-5.1.11-beta-linux-i686-glibc23/share/mysql/charsets/ |
+--------------------------+---------------------------------------------------------------------------+
8 rows in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+
3 rows in set (0.01 sec)


      
從上面可以看出,使用了配置文件中修改默認(rèn)字符集的方法,并沒有把client、connection、
results
這三項(xiàng)改成utf8,而且在建數(shù)據(jù)庫(kù)的時(shí)候我們可以通過這樣的指令實(shí)現(xiàn)數(shù)據(jù)庫(kù)的字符集設(shè)置:

CREATE DATABASE `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

      
這樣此數(shù)據(jù)庫(kù)內(nèi)的所有表和字段都將為utf8字符集編碼,所以在配置文件中修改的方法也就失去了意義。

    
     b
、我的解決辦法。

     
我們可以完全無視數(shù)據(jù)庫(kù)默認(rèn)的字符集是什么,我們關(guān)心的只有數(shù)據(jù)庫(kù)在建立的時(shí)候是不是加入了字符集
選擇。

      (1)
使用如下指令建立數(shù)據(jù)庫(kù):
       
     
     CREATE DATABASE `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

      (2)
客戶端php程序使用如下方法設(shè)定連接所使用的字符集: 
      PHP
程序在查詢數(shù)據(jù)庫(kù)之前,執(zhí)行mysql_query("set names utf8;");

     
例子:

1.    <?php

2.    mysql_connect('localhost','user','password');

3.    mysql_select_db('my_db');

4.     

5.    //請(qǐng)注意,這步很關(guān)鍵,如果沒有這步,所有的數(shù)據(jù)讀寫都會(huì)不正確的

6.    //它的作用是設(shè)置本次數(shù)據(jù)庫(kù)聯(lián)接過程中,數(shù)據(jù)傳輸?shù)哪J(rèn)字符集

7.    mysql_query("set names utf8;");

8.     

9.    //必須將gb2312(本地編碼)轉(zhuǎn)換成utf-8,也可以使用iconv()函數(shù)

10.  mysql_query(mb_convet_encoding("insert into my_table values('測(cè)試');", "utf-8", "gb2312"));

11.  ?>

     (3)如果你想使用gb2312編碼,那么建議你使用latin1作為數(shù)據(jù)表的默認(rèn)字符集,這樣就能直接用中
文在命令行工具中插入數(shù)據(jù),并且可以直接顯示出來.而不要使用gb2312或者gbk等字符集,如果擔(dān)心查詢
排序等問題,可以使用binary屬性約束,例如:
create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;

   自此,使用utf8字符集的完整的例子結(jié)束了。

    
三、舊數(shù)據(jù)升級(jí)辦法

    (1) 導(dǎo)出數(shù)據(jù)庫(kù):

mysqldump -uroot -p123456 --default-character-set=latin1 --set-charset=utf8 --opt olddatabase > newdatabase.sql

    (2)
修改newdatabase.sql,在文件開頭增加一條sql語句:SET NAMES utf8;,保存。

    (3)mysql -hlocalhost -uroot my_db < newdatabase.sql

 

posted on 2009-08-14 17:14 肥仔 閱讀(701) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫(kù)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩美女在线| 久久综合狠狠综合久久激情| 欧美视频日韩视频| 欧美xart系列在线观看| 久久婷婷久久| 久久综合色播五月| 欧美成人免费全部| 欧美久久久久久| 欧美日韩伊人| 国产精品美女999| 国产日韩欧美a| 韩国av一区二区三区| 在线观看国产欧美| 9人人澡人人爽人人精品| 宅男噜噜噜66一区二区66| 亚洲欧美国产日韩天堂区| 欧美在线视频一区| 欧美黄污视频| 亚洲一二三四久久| 久久久久久欧美| 欧美日韩国语| 国产中文一区二区| 日韩视频久久| 久久精品亚洲乱码伦伦中文 | 亚洲精品日韩在线观看| 一区二区三区四区在线| 久久精品一区四区| 亚洲日本中文| 欧美中文字幕视频| 欧美日韩1区2区| 在线看国产一区| 午夜久久资源| 亚洲精品乱码| 久久久精品网| 国产精品美女久久久免费| 亚洲国产日韩欧美综合久久| 亚洲欧美文学| 亚洲国产专区| 久久精品二区三区| 国产精品久久久久久久久| 亚洲三级影院| 欧美chengren| 久久精品中文字幕一区| 国产精品有限公司| 亚洲在线日韩| 亚洲日本欧美天堂| 欧美大片第1页| 亚洲精美视频| 欧美国产日产韩国视频| 久久久不卡网国产精品一区| 国产精品一区二区三区四区| 亚洲视频在线一区观看| 日韩一本二本av| 欧美插天视频在线播放| 久久久噜久噜久久综合| 亚洲视频视频在线| 欧美日韩情趣电影| 99国内精品久久| 亚洲黄色大片| 免费看的黄色欧美网站| 尤物精品在线| 欧美freesex交免费视频| 久久精品亚洲精品| 在线欧美一区| 亚洲福利精品| 欧美激情精品久久久久久黑人 | 亚洲欧洲久久| 美女诱惑一区| 久久综合网络一区二区| 亚洲国产精品成人va在线观看| 久热爱精品视频线路一| 久久久亚洲午夜电影| 最新国产精品拍自在线播放| 亚洲国产精品悠悠久久琪琪| 欧美日韩理论| 欧美在线观看视频在线| 久久国产精品久久w女人spa| 国产尤物精品| 亚洲国产精品嫩草影院| 欧美日韩一区二区三区四区在线观看 | 99热在这里有精品免费| 亚洲国产精品v| 欧美日韩成人激情| 小处雏高清一区二区三区| 性色一区二区| 亚洲三级免费电影| 亚洲一区在线免费| 1000部国产精品成人观看| 91久久综合亚洲鲁鲁五月天| 国产精品成人一区二区三区夜夜夜 | 亚洲无人区一区| 新狼窝色av性久久久久久| 在线成人激情视频| 亚洲乱码国产乱码精品精98午夜| 国产精品视频网站| 欧美大胆人体视频| 国产精品理论片| 欧美成人午夜免费视在线看片| 欧美日韩国产91| 性欧美办公室18xxxxhd| 亚洲精品美女久久久久| 亚洲日韩欧美视频一区| 国产精品自拍视频| 欧美激情第10页| 国产精品高潮呻吟| 欧美电影在线观看完整版| 国产精品盗摄一区二区三区| 美女视频网站黄色亚洲| 国产乱子伦一区二区三区国色天香| 欧美成人国产va精品日本一级| 欧美亚洲不卡| 亚洲国产日韩一区| 在线观看欧美| 欧美一区二区三区的| 亚洲一级高清| 欧美激情按摩在线| 免费成人美女女| 国内精品久久久| 亚洲欧美日韩在线不卡| 亚洲午夜精品国产| 欧美精品一区二区三区一线天视频 | 国产日韩一区二区三区| 亚洲美女黄网| 亚洲伦理久久| 欧美大片在线观看| 欧美激情视频在线播放| 红杏aⅴ成人免费视频| 亚洲一区二三| 亚洲自拍偷拍麻豆| 欧美色一级片| 日韩午夜在线视频| 一区二区三区回区在观看免费视频| 噜噜噜91成人网| 蜜桃av一区| 亚洲电影视频在线| 免费不卡视频| 亚洲国产精品视频一区| 91久久国产综合久久91精品网站 | 国产一区二区三区久久精品| 这里只有视频精品| 香蕉成人伊视频在线观看| 国产精品免费看片| 性欧美大战久久久久久久久| 久久激情五月丁香伊人| 国产一区二区按摩在线观看| 欧美怡红院视频| 久久久噜噜噜久久中文字免| 国内外成人在线| 久久综合久色欧美综合狠狠| 亚洲大片免费看| 一本大道久久a久久精二百| 欧美精品久久99| 一区二区三区精品视频| 欧美一区深夜视频| 精品999久久久| 欧美大片免费观看| 夜夜嗨av一区二区三区| 欧美一区成人| 在线欧美视频| 欧美日韩国产不卡| 亚洲影院免费观看| 裸体丰满少妇做受久久99精品| 欧美中文字幕精品| 亚洲电影在线免费观看| 欧美va天堂| 中国女人久久久| 久久久久久网址| 99re66热这里只有精品4| 国产精品久久久久av| 久久精品人人做人人爽| 亚洲国产成人在线播放| 亚洲欧美日韩国产一区二区三区| 国产精品最新自拍| 欧美大色视频| 欧美一区二区三区啪啪| 亚洲国产精品第一区二区三区| 亚洲综合视频1区| 亚洲二区在线视频| 国产精品久久久一区麻豆最新章节| 久久国产色av| 亚洲最新中文字幕| 亚洲盗摄视频| 久久久精彩视频| 亚洲免费影视| 亚洲日本欧美在线| 国产一区二区主播在线| 欧美日韩国产bt| 欧美/亚洲一区| 欧美在线网址| 亚洲手机成人高清视频| 亚洲高清视频中文字幕| 久久午夜av| 欧美一区二区三区的| 亚洲毛片在线看| 在线播放不卡| 国产欧美日韩一区| 欧美三级电影一区| 欧美激情综合在线| 欧美成人免费网站| 久热re这里精品视频在线6|