2016-04-18 4 views
2

見つけることはできませんが:MYSQL:私は私が探しています破損している文字を持つフィールドを見つけることができますが、REPLACE使用すると、ゼロの項目に影響を与えるという点で奇妙な問題を抱えている壊れた文字を置き換え

以下のクエリは(持っていますFirefoxのテキストフィールドbtwではChromeやSafariでは見られない%の後に壊れた文字が表示され、1000を超えるレコードが返されます。

SELECT * from resource_data where value like '%'; 

しかし、次の更新クエリは、全く同じ値を持つにもかかわらず、ゼロアイテムに影響します。

UPDATE resource_data 
SET value = REPLACE(value,'%','') 
WHERE value like '%'; 

FYI、ここでは文字がFirefoxでどのように見えるかです:notice the corrupt characters? That is what I am cutting and pasting into my query after the %

+0

「%」は 'like'のワイルドカード演算子です。もちろん –

+1

です。私が上で述べたように、あなたは%の後に壊れた文字を見ることはできませんが、そこにあります。 – Stephen

+0

私が間違っているが、 '%'のような値に注意してください;どんな文字列、たとえ空の文字列でも一致します –

答えて

0

を試してみてください行が修正されました:

SELECT REPLACE(value, UNHEX('1D'), '') 
    FROM resource_data 
    WHERE value LIKE CONCAT('%', UNHEX('1D'), '%'); 

行が表示されている場合は、それではやってみる

UPDATE resource_data 
    SET value = REPLACE(value, UNHEX('1D'), ''); 
+0

SELECTステートメントが機能しましたが、更新ステートメントが "UNHEX 'ネイティブ関数の呼び出しで不正なパラメーターカウント"で失敗しました " – Stephen

+0

OH WAIT ...コードをカットして貼り付けただけで、ステートメント...それは読む必要があります: 'UPDATE resource_data SET値= REPLACE(値、UNHEX( '1D')、 '');' – Stephen

+0

さて、私の括約はバランスがとれていた。 Hehe。私はそれを編集した。 –

0

それはlatin1のヘクス1Dであれば、これはフェッチした場合、...

を参照してください。この

UPDATE resource_data 
SET value = REPLACE(value,'%','') 
WHERE INSTR(value, '%') > 0 
+0

ありがとうございますが、影響を受ける行は0行です。この問題は、WHERE句には実際にはありません。なぜなら、それをそのまま残しても同じように失敗するからです。 – Stephen

関連する問題