實(shí)戰(zhàn)mysql導(dǎo)出中文亂碼及phpmyadmin導(dǎo)入中文亂碼的解決方法
第一步:本地?cái)?shù)據(jù)導(dǎo)出sql文件。心想這對(duì)于navicat小事一樁。直接在數(shù)據(jù)庫上右鍵“轉(zhuǎn)儲(chǔ)sql”(如圖1),嘩嘩,十幾秒的時(shí)間導(dǎo)出成功。
(圖1:navicat下對(duì)整個(gè)數(shù)據(jù)庫轉(zhuǎn)sql)
用記事本打開一看,傻眼了。中文全是亂碼。咋回事呢?搜索了一下,改變什么連接屬性啥的。不管用。試著在單張表上,轉(zhuǎn)儲(chǔ)sql,嘿,中文正常。但是82個(gè)表,我一個(gè)個(gè)轉(zhuǎn)儲(chǔ)我不累死。不行??磥碇荒軛売梦倚膼鄣膎avicat了。想起有個(gè)mysqldump,好試試它。運(yùn)行-C:\Documents and Settings\Administrator>mysqldump -uroot -p123 ttg>ttgbk2.sql。打開一看,還是亂碼。還不行。唉。。搜索,改成下面的加上指定字符集
C:\Documents and Settings\Administrator>mysqldump -uroot -p123 --default-character-set=gbk ttg>ttgbk2.sql。打開看看。嘿可以了。
第二步:打開虛擬主機(jī)提供的phpmyadmin.導(dǎo)入選擇文件ttgbk2.sql.點(diǎn)執(zhí)行。那個(gè)速度,唉。。。一會(huì)兒報(bào)錯(cuò)了。在執(zhí)行l(wèi)ock tables tablename write 時(shí)出現(xiàn)access denied錯(cuò)誤,原來我是虛擬主機(jī)用戶沒有 lock tables的權(quán)限.打開sql一看還真有l(wèi)ock tables 選項(xiàng)。沒權(quán)限那就不用這個(gè)。到網(wǎng)上一搜說加上--skip-lock-tables,心想不錯(cuò),應(yīng)該是這個(gè)“跳過鎖表”嘛
在mysqldump時(shí)加上-skip-lock-tables選項(xiàng),那么命令行就變成
C:\Documents and Settings\Administrator>mysqldump -uroot -p123 --default-character-set=gbk --skip-lock-tables ttg>ttgbk3.sql.
結(jié)果令人失望,還是有l(wèi)ock tables.
后來看了一下mysqldump --help
才明白--skip-lock-tables是用在備份時(shí)候不讓讀寫。但是如果你不想讓導(dǎo)出的帶lock-tables(因?yàn)槟銓?dǎo)入的時(shí)候沒有權(quán)限嘛,呵呵)應(yīng)該是使用add-locks=false,這是2個(gè)概念。正確的如下
C:\Documents and Settings\Administrator>mysqldump -uroot -p123 --default-character-set=gbk ttg --add-locks=false>ttgttg3.sql.
我的版本導(dǎo)出的在記事本中打開是asni格式的。
再次到phpmyadmin處導(dǎo)入。結(jié)果是導(dǎo)入了3個(gè)表后報(bào)錯(cuò)。mysql語句報(bào)錯(cuò)。一看中文還亂碼。。。。。接近崩潰。
再找原因。把“MySQL 連接校對(duì)”改成gbk-chinese-ci,把language改成中文-chinese simplified(如圖2)。再把導(dǎo)入時(shí)“文件編碼”改成“gbk”(默認(rèn)的是utf-8,當(dāng)然對(duì)應(yīng)的sql文件的編碼用記事本打開就是ansi.)(如圖三).再試。。。。
(圖二:修改連接校對(duì)及l(fā)anguage)
(圖三:修改文件的字符集為gbk)
終于所有表導(dǎo)入成功。打開一個(gè)含有中文的表,字段顯示正常。
2點(diǎn)體會(huì):
1、數(shù)據(jù)庫編碼歸數(shù)據(jù)庫編碼。保證連接校對(duì)與數(shù)據(jù)庫編碼一致即可。
2、sql文件編碼歸文件編碼。保證導(dǎo)入時(shí)選擇的文件編碼與數(shù)據(jù)庫所用編碼一致最好。
這是2個(gè)編碼問題。
服了你了mysql.從知道你有這個(gè)編碼問題到到現(xiàn)在,你還是這個(gè)樣子。這個(gè)問題還是讓很多人困惑。啥時(shí)候像sqlserver那樣國(guó)際化就好了。
相關(guān)文章
php數(shù)組函數(shù)序列之prev() - 移動(dòng)數(shù)組內(nèi)部指針到上一個(gè)元素的位置,并返回該元素值
prev() 函數(shù)把指向當(dāng)前元素的指針移動(dòng)到上一個(gè)元素的位置,并返回該元素值。如果內(nèi)部指針已經(jīng)超過數(shù)組的第一個(gè)元素之前,函數(shù)返回 false2011-10-10PHP設(shè)計(jì)模式之工廠模式(Factory Pattern)的講解
今天小編就為大家分享一篇關(guān)于PHP設(shè)計(jì)模式之工廠模式(Factory Pattern)的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03詳解PHP多個(gè)進(jìn)程配合redis的有序集合實(shí)現(xiàn)大文件去重
這篇文章主要介紹了PHP多個(gè)進(jìn)程配合redis的有序集合實(shí)現(xiàn)大文件去重,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí) 吧2019-03-03PHP UTF8編碼內(nèi)的繁簡(jiǎn)轉(zhuǎn)換類
在網(wǎng)上找了很久都沒有找到UTF8字符集內(nèi)的繁簡(jiǎn)轉(zhuǎn)換,或許網(wǎng)上已經(jīng)有人寫過這樣的代碼。2009-07-07php構(gòu)造函數(shù)與析構(gòu)函數(shù)
PHP析構(gòu)函數(shù)與構(gòu)造函數(shù)是相反的,它們被調(diào)用來一個(gè)對(duì)象從內(nèi)存中銷毀,幫助我們釋放對(duì)象屬性所占用的內(nèi)存并銷毀對(duì)象相關(guān)的資源。2016-04-04php 截取GBK文檔某個(gè)位置開始的n個(gè)字符方法
下面小編就為大家?guī)硪黄猵hp 截取GBK文檔某個(gè)位置開始的n個(gè)字符方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03