これは文字セットではなく、照合関連のようです。照合順序は、ソートまたは比較に関して、MySQL が「ほぼ等しい」文字をどのように扱うかを定義します。
たとえば、iso-8859-15 のデフォルトの照合では、ü = u
できることは、フィールドをビン照合のように扱うことです。バイナリ照合では、類似の文字は同等に扱われません。
正しいバイナリ照合順序を選択してください
SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLLATIONS WHERE COLLATION_NAME LIKE '%bin%';
次に、次のように更新を実行します。
UPDATE TABLE SET columnx = REPLACE( columnx COLLATE latin1_bin, '–', '-' );
訂正:
REPLACE 比較は常にバイナリ照合を使用して行われます
編集:
それでも 0 行が更新される場合は、正しい文字を置き換えていない可能性があります。文字を含む文字列を 16 進数に変換し、16 進数値を投稿して、どの文字について話しているかを確認できるようにします
例えば
SELECT HEX( columnx ) LIMIT 1;
EDIT2:
見たばかりですが、あなたは実際に、START OF GUARDED AREA\u0096
と呼ばれる制御文字を取得すると言いました..この文字が作成するプログラムは何であれ..16 進数でこれは. クエリの例では、 EN DASHという文字を置き換えています0xC2 0x96
貼り付けるだけで制御文字を置き換えるのは難しく、変換によって制御文字が壊れる可能性があります。代わりにUNHEX( hexval )を使用して、MySQL に意味する文字を伝えることができます。
UPDATE TABLE SET columnx = REPLACE( columnx UNHEX( 'C296' ), '-' );
または、これをより明確にするために(またはさらに混乱させる:))、これは「通常の」ハイフンも16進値として渡します
UPDATE TABLE SET columnx = REPLACE( columnx UNHEX( 'C296' ), UNHEX( '2D' ) );