<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java世界

    學習筆記

    常用鏈接

    統(tǒng)計

    積分與排名

    天籟村

    新華網(wǎng)

    雅虎

    最新評論

    MYSQL 字符集問題

    MySQL的字符集支持(Character Set Support)有兩個方面:

    ?

    字符集(Character set)和排序方式(Collation)。

    對于字符集的支持細化到四個層次:

    服務器(server),數(shù)據(jù)庫(database),數(shù)據(jù)表(table)和連接(connection)。

    ?

    1.MySQL默認字符集

    MySQL對于字符集的指定可以細化到一個數(shù)據(jù)庫,一張表,一列,應該用什么字符集。

    ?

    但是,傳統(tǒng)的程序在創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表時并沒有使用那么復雜的配置,它們用的是默認的配置,那么,默認的配置從何而來呢?

    ??? (1)編譯MySQL 時,指定了一個默認的字符集,這個字符集是 latin1;

    ??? (2)安裝MySQL 時,可以在配置文件 (my.ini) 中指定一個默認的的字符集,如果沒指定,這個值繼承自編譯時指定的;

    ??? (3)啟動mysqld 時,可以在命令行參數(shù)中指定一個默認的的字符集,如果沒指定,這個值繼承自配置文件中的配置,此時 character_set_server 被設(shè)定為這個默認的字符集;

    ??? (4)當創(chuàng)建一個新的數(shù)據(jù)庫時,除非明確指定,這個數(shù)據(jù)庫的字符集被缺省設(shè)定為character_set_server;

    ??? (5)當選定了一個數(shù)據(jù)庫時,character_set_database 被設(shè)定為這個數(shù)據(jù)庫默認的字符集;

    ??? (6)在這個數(shù)據(jù)庫里創(chuàng)建一張表時,表默認的字符集被設(shè)定為 character_set_database,也就是這個數(shù)據(jù)庫默認的字符集;

    ??? (7)當在表內(nèi)設(shè)置一欄時,除非明確指定,否則此欄缺省的字符集就是表默認的字符集;

    簡單的總結(jié)一下,如果什么地方都不修改,那么所有的數(shù)據(jù)庫的所有表的所有欄位的都用 latin1 存儲,不過我們?nèi)绻惭b MySQL,一般都會選擇多語言支持,也就是說,安裝程序會自動在配置文件中把 default_character_set 設(shè)置為 UTF-8,這保證了缺省情況下,所有的數(shù)據(jù)庫的所有表的所有欄位的都用 UTF-8 存儲。

    2.查看默認字符集(默認情況下,mysql的字符集是latin1(ISO_8859_1)

    ?

    通常,查看系統(tǒng)的字符集和排序方式的設(shè)定可以通過下面的兩條命令:

    ???? mysql> SHOW VARIABLES LIKE '%set%'

    +--------------------------+---------------------------------+

    | 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?????? | D:"mysql-5.0.37"share"charsets" |

    +--------------------------+---------------------------------+

    mysql> SHOW VARIABLES LIKE '%collation%';

    +----------------------+-----------------+

    | Variable_name??????? | Value?????????? |

    +----------------------+-----------------+

    | collation_connection | utf8_general_ci |

    | collation_database?? | utf8_general_ci |

    | collation_server???? | utf8_general_ci |

    +----------------------+-----------------+

    3.修改默認字符集

    ?

    (1) 最簡單的修改方法,就是修改mysql的my.ini文件中的字符集鍵值,

    如 ?? default-character-set = utf8

    ????? character_set_server = utf8

    ?? 修改完后,重啟mysql的服務,service mysql restart

    ?? 使用 mysql> SHOW VARIABLES LIKE 'character%';查看,發(fā)現(xiàn)數(shù)據(jù)庫編碼均已改成utf8

    +--------------------------+---------------------------------+

    | Variable_name??????????? | Value?????????????????????????? |

    +--------------------------+---------------------------------+

    | character_set_client???? | utf8??????????????????????????? |

    | character_set_connection | utf8??????????????????????????? |

    | character_set_database?? | utf8??????????????????????????? |

    | character_set_filesystem | binary????????????????????????? |

    | character_set_results??? | utf8??????????????????????????? |

    | character_set_server???? | utf8??????????????????????????? |

    | character_set_system???? | utf8??????????????????????????? |

    | character_sets_dir?????? | D:"mysql-5.0.37"share"charsets" |

    +--------------------------+---------------------------------+

    ?? (2) 還有一種修改字符集的方法,就是使用mysql的命令

    ?

    ?? mysql> SET character_set_client = utf8 ;

    ???? mysql> SET character_set_connection = utf8 ;

    ???? mysql> SET character_set_database = utf8 ;

    ???? mysql> SET character_set_results = utf8 ;

    ???? mysql> SET character_set_server = utf8 ;

    ???? mysql> SET collation_connection = utf8 ;

    ???? mysql> SET collation_database = utf8 ;

    ???? mysql> SET collation_server = utf8 ;

    一般就算設(shè)置了表的默認字符集為utf8并且通過UTF-8編碼發(fā)送查詢,你會發(fā)現(xiàn)存入數(shù)據(jù)庫的仍然是亂碼。問題就出在這個connection連接層上。解決方法是在發(fā)送查詢前執(zhí)行一下下面這句:

    SET NAMES 'utf8';

    它相當于下面的三句指令:

    SET character_set_client = utf8;

    SET character_set_results = utf8;

    SET character_set_connection = utf8;

    總結(jié):

    因此,使用什么數(shù)據(jù)庫版本,不管是3.x,還是4.0.x還是4.1.x,其實對我們來說不重要,重要的有二:

    1) 正確的設(shè)定數(shù)據(jù)庫編碼.MySQL4.0以下版本的字符集總是默認ISO8859-1,MySQL4.1在安裝的時候會讓你選擇。如果你準備使用UTF- 8,那么在創(chuàng)建數(shù)據(jù)庫的時候就要指定好UTF-8(創(chuàng)建好以后也可以改,4.1以上版本還可以單獨指定表的字符集)

    2) 正確的設(shè)定數(shù)據(jù)庫connection編碼.設(shè)置好數(shù)據(jù)庫的編碼后,在連接數(shù)據(jù)庫時候,應該指定connection的編碼,比如使用jdbc連接時,指定連接為utf8方式.

    posted on 2008-03-28 13:32 Rabbit 閱讀(408) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲国产精品特色大片观看完整版| 亚洲精品美女久久久久99小说| 久久亚洲精品AB无码播放| 一级**爱片免费视频| 四虎影视永久免费观看地址| 亚洲精品无码久久久久牙蜜区| 亚洲成在人线aⅴ免费毛片| 亚洲人成网站在线观看播放青青| 在免费jizzjizz在线播| 亚洲国产片在线观看| 国产卡一卡二卡三免费入口| 亚洲中文字幕久久久一区| 成人a视频片在线观看免费| 日本亚洲色大成网站www久久| 成人毛片18女人毛片免费96| 亚洲AV永久无码精品一福利| 波多野结衣免费视频观看| EEUSS影院WWW在线观看免费| 国产V亚洲V天堂A无码| **俄罗斯毛片免费| 亚洲国产成人久久一区二区三区| 国产免费69成人精品视频| 中国一级全黄的免费观看| 亚洲精品在线免费观看| 麻豆国产精品入口免费观看| 亚洲精品视频免费| 日韩精品一区二区亚洲AV观看| 中国xxxxx高清免费看视频| 色偷偷尼玛图亚洲综合| 亚洲精品中文字幕乱码三区| 69pao强力打造免费高清| 亚洲丶国产丶欧美一区二区三区| 亚洲色欲久久久久综合网| 日韩中文字幕免费视频| 亚洲精品123区在线观看| 亚洲精品无码专区2| 亚洲免费二区三区| 爱情岛论坛免费视频| 久久精品国产亚洲AV大全| 日本大片在线看黄a∨免费| 很黄很污的网站免费|