垃圾郵件的戰鬥中,我發現了一些保存垃圾評論沒有任何內容...的Mysql無法保存UTF串在某些情況下
試圖找出問題後,這裏是我一直保存到類似的評論後發現,隨着MySQL的數據庫文件...
這是(因爲未知輸入編碼的HEX)有何評論前幾個「字符」的樣子:
D1EA E0F7 E0F2 FC20 EFEE EFF3 EBFF F0ED FBE5 20EF F0EE E3F0 E0EC ECFB
執行INSERT INTO test VALUES (0xD1EAE0F7E0F2FC20EFEEEFF3EBFFF0EDFBE520EFF0EEE3F0E0ECECFB21),(0x21D1EAE0F7E0F2FC20EFEEEFF3EBFFF0EDFBE520EFF0EEE3F0E0ECECFB), (0x21)
測試MySQL表(UTF-8後)包含3行,首先沒有任何文字,第二和第三個單個字符「!」作爲文本...(注意21「十六進制代碼」也是在第一次輸入的結尾,但它不會被保存)。 (latin1編碼保存了一些無用的文本替換爲每個字節,但這篇文章是不是關於它)
當然,D1EA(D = 1101 0001應該後面跟着一個10xxxxxx字節,而不是1110xxxx)是無效的UTF- 8字符,但像數據庫服務器的健壯的系統應該能夠處理它...
我的猜測是,Mysql(版本5.1.66-0 + squeeze1)不應該選擇何時保存數據,何時不,即使它不是有效的UTF-8編碼字符......或者至少,它不應該聲稱當它決定不存儲數據時查詢成功!
是在mysql中的bug,還是什麼?
感謝
謝謝你,我會用這個接口來防止這樣的垃圾評論...問題與MySQL不保存數據聲稱它被成功保存,但是,仍然存在,這是不通用的解決方案 – tomas
@tomas你是什麼意思不通用? – Esailija
您必須修改每個系統以檢查請求編碼。但是,每個系統都已經檢查了mysql查詢的結果,所以它應該是mysql告訴「不,這個數據還沒有被保存」insted的「OK,繼續」... – tomas