關(guān)于亂碼的原因不好一下說出,給出以下辦法,嘗試排除法來解決一下看看:
創(chuàng)新互聯(lián)的客戶來自各行各業(yè),為了共同目標,我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括網(wǎng)站制作、做網(wǎng)站、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。
解決MySql數(shù)據(jù)亂碼:
1 寫過濾器設(shè)置編碼格式(格式和JSP頁面的編碼一樣),或則在請求里面寫request.setCharacterEncoding("編碼方式");
2 如果是查詢出數(shù)據(jù)亂碼,在鏈接的URL上加上編碼格式(你這里加了,沒問題);
3 修改my.ini文件里面的 default-character-set= 您要的編碼格式 (一共有兩處,你查找一下 改為一樣的編碼格式)
4 如果是寫入到數(shù)據(jù)庫之后是亂碼(前提是已經(jīng)寫了過濾器處理編碼),修改my.ini文件里面查找sql-mode 設(shè)置 sql-mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
如果出現(xiàn)亂碼情況 就試試吧!
AUTO_INCREMENT=11 這個意思就是ID或是指定的列從11開始自增...比如你添加第一條記錄,則變成12,以此類推......
MySQL錯語信息 錯誤編碼:1366 錯誤信息:Incorrect integer value: '' for column 'shoptype' at row 1是設(shè)置錯誤造成的,解決方法為:
1、這句話翻譯過來就是說:不正確的列名稱”認真查找后發(fā)現(xiàn),由于我最后無意中添加了一列,且那列沒有給列名如下。
2、直接把這列刪除就可以了如下。
3、但是沒想到刪除后還有問題,說?incorrect column name“address”翻譯過來就是:不正確的列名稱address如下。
4、認真觀察發(fā)現(xiàn),原來是address后面無意中多了一個空格。
5、刪除多余的空格,然后在保持即可。
1、修改安裝文件根目錄下的my.ini文件:
搜索字段default-character-set,設(shè)置其值為utf8/gbk之一(注意設(shè)置utf8的時候不能設(shè)成utf-8)
再去重啟MySQL服務(wù)器
如果還是出現(xiàn)亂碼,接著執(zhí)行下面操作
2、修改數(shù)據(jù)庫編碼
在安裝目錄的data目錄下找到你出現(xiàn)亂碼的數(shù)據(jù)庫對應(yīng)的文件夾(這個文件夾即是你這個數(shù)據(jù)庫存放數(shù)據(jù)的地方),
進入找到db.opt文件(即此數(shù)據(jù)庫的編碼配置文件),修改值為下面的
default-character-set=gbk
default-collation=gbk_chinese_ci
再去重啟MySQL服務(wù)器
如果還是出現(xiàn)亂碼,接著執(zhí)行下面操作
3、再不行,備份原數(shù)據(jù)庫數(shù)據(jù),直接drop掉這個數(shù)據(jù)庫
重新創(chuàng)建數(shù)據(jù)庫并設(shè)置編碼
create database yourDB character set gbk;
別忘了重啟MySQL服務(wù)器綜上:如果還沒有解決,我也沒轍了。重裝吧,重裝的時候設(shè)置下編碼三處的編碼要一致
數(shù)據(jù)庫的編碼是 gbk 的,在查詢的時候把中文(utf-8)轉(zhuǎn)換成 gbk編碼就可以了 $nickname=iconv('utf-8','gbk//TRANSLIT',$nickname); 轉(zhuǎn)換后才執(zhí)行查詢
MySQL錯語信息錯誤編碼:1366錯誤信息:Incorrectintegervalue:''forcolumn'shoptype'atrow1是設(shè)置錯誤造成的,解決方法為:
1、這句話翻譯過來就是說:不正確的列名稱”認真查找后發(fā)現(xiàn),由于我最后無意中添加了一列,且那列沒有給列名如下。
2、直接把這列刪除就可以了如下。
3、但是沒想到刪除后還有問題,說?incorrectcolumnname“address”翻譯過來就是:不正確的列名稱address如下。
4、認真觀察發(fā)現(xiàn),原來是address后面無意中多了一個空格。
5、刪除多余的空格,然后在保持即可。
如果從庫上表 t 數(shù)據(jù)與主庫不一致,導(dǎo)致復(fù)制錯誤,整個庫的數(shù)據(jù)量很大,重做從庫很慢,如何單獨恢復(fù)這張表的數(shù)據(jù)?通常認為是不能修復(fù)單表數(shù)據(jù)的,因為涉及到各表狀態(tài)不一致的問題。下面就列舉備份單表恢復(fù)到從庫會面臨的問題以及解決辦法:
場景 1
如果復(fù)制報錯后,沒有使用跳過錯誤、復(fù)制過濾等方法修復(fù)主從復(fù)制。主庫數(shù)據(jù)一直在更新,從庫數(shù)據(jù)停滯在報錯狀態(tài)(假設(shè) GTID 為 aaaa:1-100)。
修復(fù)步驟:
在主庫上備份表 t (假設(shè)備份快照 GTID 為 aaaa:1-10000);
恢復(fù)到從庫;
啟動復(fù)制。
這里的問題是復(fù)制起始位點是 aaaa:101,從庫上表 t 的數(shù)據(jù)狀態(tài)是領(lǐng)先其他表的。aaaa:101-10000 這些事務(wù)中只要有修改表 t 數(shù)據(jù)的事務(wù),就會導(dǎo)致復(fù)制報錯 ,比如主鍵沖突、記錄不存在(而 aaaa:101 這個之前復(fù)制報錯的事務(wù)必定是修改表 t 的事務(wù))
解決辦法:啟動復(fù)制時跳過 aaaa:101-10000 這些事務(wù)中修改表 t 的事務(wù)。
正確的修復(fù)步驟:
1. 在主庫上備份表 t (假設(shè)備份快照 GTID 為 aaaa:1-10000),恢復(fù)到從庫;
2. 設(shè)置復(fù)制過濾,過濾表 t:
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('db_name.t');
3. 啟動復(fù)制,回放到 aaaa:10000 時停止復(fù)制(此時從庫上所有表的數(shù)據(jù)都在同一狀態(tài),是一致的);
START SLAVE UNTIL SQL_AFTER_GTIDS = 'aaaa:10000';
4. 刪除復(fù)制過濾,正常啟動復(fù)制。
注意事項:這里要用 mysqldump --single-transaction --master-data=2,記錄備份快照對應(yīng)的 GTID
場景 2
如果復(fù)制報錯后,使用跳過錯誤、復(fù)制過濾等辦法修復(fù)了主從復(fù)制。主、從庫數(shù)據(jù)一直在更新。
修復(fù)步驟:
在主庫上備份表 t (假設(shè)備份快照 GTID為 aaaa:1-10000);
停止從庫復(fù)制,GTID為 aaaa:1-20000;
恢復(fù)表 t 到從庫;
啟動復(fù)制。
這里的問題是復(fù)制起始位點是 aaaa:20001,aaaa:10000-20000 這些事務(wù)將不會在從庫上回放,如果這里面有修改表 t 數(shù)據(jù)的事務(wù),從庫上將丟失這部分數(shù)據(jù)。
解決辦法:從備份開始到啟動復(fù)制,鎖定表 t,保證 aaaa:10000-20000 中沒有修改表 t 的事務(wù)。
正確修復(fù)步驟:
對表 t 加讀鎖;
在主庫上備份表 t;
停止從庫復(fù)制,恢復(fù)表 t;
啟動復(fù)制;
解鎖表 t。
如果是大表,這里可以用可傳輸表空間方式備份、恢復(fù)表,減少鎖表時間。