いいえ、数値リテラルを引用符で囲む必要はありません。
MySQLでは、数値リテラルを一重引用符で囲んでも問題ありません。これが頻繁に行われるのは、プログラマーが文字か数値かを気にせず、すべてのリテラルを引用符で囲むと便利だからだと思います。
値が引用符で囲まれている場合と、値が数値リテラルでない場合に引用符で囲まれていない場合の動作には違いがあります。たとえば、このコンテキストではid
、タイプの列が与えられますINTEGER
... WHERE id = '1X'
ここ'1X'
では、値が1のリテラル数値として解釈されますが、このコンテキストでは
... WHERE id = 1X
ここ1X
では、数値リテラルではなく、列名として解釈されます。これにより、MySQLが「不明な列」例外をスローする可能性があります。
これらがどのように解釈されるかの違いを考慮してください...
... WHERE id = 'id' -- 'id' will be interpreted as numeric literal value 0
... WHERE id = id -- id will be interpreted as a column name
したがって、数値リテラルとして解釈されることが期待されるものが数値以外のものである場合、それは実際にはアプリケーションに最適な動作に要約されます。
私の個人的な好みは、数値リテラルを引用しないことです。これはおそらく、他のDBMSでの経験と、暗黙的なデータ変換によって引き起こされる問題を回避する必要があるためです。私の個人的な好みは、プリペアドステートメントを使用し、SQLテキストのリテラルとして値を含むステートメントを避けることです。(MySQLの場合、バインド変数を含むプリペアドステートメントはデータベースに送信されるときにプレーンSQLテキストに変換されるため、その点はほとんど意味がありません...しかし、これは私のコードではなくMySQLライブラリによって行われます。おそらく、MySQL自体ではなく、他のRDBMS(Oracle、Teradata、DB2、SQL Server)を使用した長い経験から最も多くの情報を得ています。