前提
状況
以下テーブルとカラムがある中で、SQLで'your_name'カラムに「加藤」という文字が入ったデータを取り出す処理をしたいため
↓SQL
SELECT * FROM `contact_forms` WHERE `your_name` LIKE `%加藤%`
を実行
↓テーブルとカラム
狙い:'your_name'に「加藤」を含むデータのみ取得
困ったこと
上記SQLの結果、以下エラーが発生
#1054 - 列 '%加藤%' は 'where clause' にはありません。
やったこと①
まずはエラー文を理解する
対策
そもそも「列 '%加藤%' は」とあるが、'%加藤%' は値であり、列(カラム)ではない。
ということから、'%加藤%'が列である、というSQL文を書いてしまっていることに気づく
やったこと②
クオーテーションの使い方を注視
今回のエラーコード#1054が発生した際に気を付けるべきことは、以下によると「クオーテーションの使い方」が一つの原因であることが判明
MySQLでよく見かけるエラーの発生原因と対策方法 | サービス | プロエンジニア
実際、エラーを吐いたSQL文ではテーブルもカラムもデータ(値)も全て``(バッククオーテーション)で囲っていた。
そこで、MySQLでの' '(シングルクオーテーション)と `` (バッククオーテーション)の使い分けを以下記事で確認したところ、以下のように使い分けるらしい。
・バッククオートはテーブル名やフィールド名
・シングルクオートは値や文字列
対策
%加藤%
(バッククオーテーション)を'%加藤%'(シングルクオーテーション)に変更
結果
無事「加藤」を含むデータのみが取得できた
補足
本エラーについてツイートしたところ、「MySQLでは``(バッククオーテーション)使う必要ない」との指摘があった。
確かにテーブルもカラムも全て' '(シングルクオーテーション)で囲っても問題なく処理が実行された。
備考
何気なく使っていた' '(シングルクオーテーション)と``(バッククオーテーション)の意味を理解することができた。