イタンジ株式会社の磯谷です。不動産賃貸仲介業向けのSaaSである
ノマドクラウド
の開発をしています。
ノマドクラウドではRailsとMySQLを使用して開発を行っています。その中で、VARCHAR型のカラムに格納されている値の、比較時の末尾の空白の取り扱いについてつまづいたので、今回はその点について書いていこうと思います。
MySQLの環境は以下です。
MySQL 8.0
文字セット
utf8mb4
照合順序
utf8mb4_general_ci
つまづいたこと
あるテーブルについてVARCHAR型のカラムに格納されている値を用いてレコードを検索するという要件がありました。このとき、そのテーブルには該当のVARCHAR型のカラムに、末尾の空白の有無のみが異なる値、例えば
a
という値と、
a
という値を格納したレコードがそれぞれ存在しており、またその2つのレコードを区別する必要がありました。
以下のようなコードによってその検索を行おうと思っていたのですが、該当のVARCHAR型のカラムの値の末尾の空白を区別せずに
a
という値を格納したレコードを取得してしまっており、それら空白の有無のみが異なる値を持つレコードの区別につまづいてしまいました。
Model.find_by(column_name: 'a ')
区別されなかった理由
この、末尾の空白が区別されない点についてはMySQLのこちらのドキュメントの最後に記載されています。