1、DTS數(shù)據(jù)同步報錯
目前成都創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、丹江口網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
2、源端用戶user1擁有所有database的權(quán)限,包括select權(quán)限
3、使用user1用戶登錄源端MySQL,當(dāng)指定database為database1,select被拒絕
4、從MySQL的物理表文件看,表的.frm和.ibd文件是正常的
5、將報錯的表table1備份為table2,刪除table1,select information_schema.columns、information_schema.tables可執(zhí)行且不報錯
6、將table2重命名為table1,select information_schema.columns、information_schema.tables再次報一樣的錯誤
7、將table1重命名為table2,select information_schema.columns、information_schema.tables可執(zhí)行且不報錯
8、原因判斷
參考:
其他用戶也遇到了與MySQL對象相關(guān)的information_schema.columns、information_schema.tables的select報錯,但是涉及的MySQL對象為view,而我們這里為table。
view可以指定definer等,而table1的創(chuàng)建語法中沒有找到這樣的字眼。但是推測以某一種方式與definer相關(guān)聯(lián)。
9、輔證
你分析的對的:因為B表的主鍵id是int類型的,你傳遞的條件是一個字符串。mysql在查詢的時候回強(qiáng)制轉(zhuǎn)換字符,將字符串轉(zhuǎn)為4,如果你的字符串第一個字符不是數(shù)字的話應(yīng)該是差不錯來的。
如有以下sql:
T1.limit_user 為account表中查詢出來的值
‘9,8,4’
查詢sql正確查詢結(jié)果應(yīng)為:
不可推薦 ,推銷客戶,推銷客戶
實際結(jié)果為:
不可推薦
原因:
在mysql中in里面如果是字符串的話,會自動轉(zhuǎn)化成int類型的,內(nèi)部使用了如下方法: CAST('4,3' AS INT)
導(dǎo)致’4,3‘ 變成了4,所以上述查詢sql結(jié)果只有第一個。
解決方案
FIND_IN_SET('查詢的值(如:1)', '使用逗號隔開的字符串集合,如:('1,2,3')')
正確的sql
我們經(jīng)常在運行MySQL時會出一些錯誤,也經(jīng)常被這些錯誤搞得暈頭轉(zhuǎn)向。當(dāng)然解決這些問題的首要任務(wù)是找到日志信息。
MySQL的錯誤信息是在data目錄下的,且文件名為hostname.err(hostname指的是主機(jī)名),但由于每個人安裝的環(huán)境不一樣,或你忘記了data目錄的所在位置,你可以通過下面方法查找。
#hostname //獲得主機(jī)名
hostname
#find / -name hostname.err
.....
#cd ...
#vi hostname.err