きっかけ
Oracleではユニークなのに、MySQLだとユニーク設定しようとするとエラーになる項目があり
原因を追究したところ、データ後ろの半角␣の有無の違いでユニーク扱いになっているデータが、MySQLだと重複データとして扱われているようだったので調べてみた
公式ドキュメントによると
いずれかの標準演算子(= や <> など。LIKE は含まない)を使用してケース非依存文字列を比較する場合、後続の空白(スペース、タブ、改行復帰)は無視されます。(4.1のマニュアルより)
対処法
MySQLの根本仕様なので、空白のままユニークキーとすることは、まずあきらめ
半角␣を別の任意の文字列(-ハイフン等)に置き換えて格納することにした。
REPLACE(問題の項目,' ','-')
該当の事象は、WHERE句、JOIN句で使用する際も同様の扱いになるため
注意が必要だ。
参考リンク