1267-?Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=
成都創(chuàng)新互聯(lián)公司10多年成都企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站建設(shè)及推廣,對玻璃隔斷等多個領(lǐng)域擁有豐富的網(wǎng)站制作經(jīng)驗的網(wǎng)站建設(shè)公司。
問題描述 :
SELECT distinct a.user_id INTO userID FROM authorization_record a WHERE a.open_id = openId AND a.auth_type = '5001';
錯誤如下:
[Err]1267- Illegal mixofcollations (utf8_unicode_ci,IMPLICIT)and(utf8_general_ci,IMPLICIT)foroperation'='
解決方法 :
將比較等式一邊進(jìn)行字符串轉(zhuǎn)換,如改為“ CONVERT(b.fullCode USING utf8) COLLATE utf8_unicode_ci ”
SELECT distinct a.user_id INTO userID FROM authorization_record a WHERE a.open_id = CONVERT(openId USING utf8) COLLATE utf8_unicode_ci AND a.auth_type = '5001';
錯誤:你的語句:
mysqli_query($_conn,"insert ...".mysqli_error()));
把錯誤信息作為語句的一部分,這是錯的,正確的寫法是:
mysqli_query("insert into ...") or dir(mysqli_error($conn));
如果從庫上表 t 數(shù)據(jù)與主庫不一致,導(dǎo)致復(fù)制錯誤,整個庫的數(shù)據(jù)量很大,重做從庫很慢,如何單獨恢復(fù)這張表的數(shù)據(jù)?通常認(rèn)為是不能修復(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ù),從庫上將丟失這部分?jǐn)?shù)據(jù)。
解決辦法:從備份開始到啟動復(fù)制,鎖定表 t,保證 aaaa:10000-20000 中沒有修改表 t 的事務(wù)。
正確修復(fù)步驟:
對表 t 加讀鎖;
在主庫上備份表 t;
停止從庫復(fù)制,恢復(fù)表 t;
啟動復(fù)制;
解鎖表 t。
如果是大表,這里可以用可傳輸表空間方式備份、恢復(fù)表,減少鎖表時間。
include("mysql.php");
if($_POST['sub']){
$sql="insert
into
message
(user,pass1,pass2,title,answer,read,lastdate)
"
.
"values
('$_POST[user]','$_POST[pass1]','$_POST[pass2]','$_POST[title]','$_POST[answer]','$_POST[read]',now())";
$rs=mysql_query($sql);
if($rs){
echo
"scriptalert('成功!');history.go(-1)/script";
}
else{
echo
"scriptalert('失敗!');history.go(-1)/script";
}
}
幫你改了一下,id為主鍵的時候,不能為空,不要插入,設(shè)為自動增長即可
加一條判斷,也方便知道結(jié)果
搞不定就把源代碼打包發(fā)給我,我?guī)湍銠z查
你要是有ID字段的話,建表的時候最好建成INT類型等,時間類型一般用 TIMESTAMP就可以了,
你插入的時候,INT等類型 不要 加"",加了就是
字符 類型了,TIMESTAMP類型最好弄成default字段,讓它自己插入,也安全和省不少的麻煩。
還有要是自己插入的話,要注意中國的“” 和英語的""是不一樣的,編譯器只把英語的""看出是字符串定界付,中國的“”則是字符串的內(nèi)容。
大多數(shù)編譯器顯示這兩個東西的效果是一樣的,所以我也經(jīng)常找不到原因,經(jīng)常費好半天勁也不知道問題在哪,只有重新寫語句,到最好才想到是“”的問題。
朋友,你要注意我說的經(jīng)驗啊,不管你以后從事什么開發(fā),這都是一個頭痛的問題,得記住了。
當(dāng)前題目:mysql寫入失敗怎么辦 mysql寫錯了怎么辦
轉(zhuǎn)載注明:http://m.kartarina.com/article14/hjgige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)站制作、品牌網(wǎng)站制作、Google、動態(tài)網(wǎng)站、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)