purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

mysqlでのリテラル指定

最近意識してなかったのでメモ

mysqlの場合はこのあたりのマニュアルに書いてあります
MySQL :: MySQL 5.1 リファレンスマニュアル :: 8.1 リテラル値

引用符で囲むと文字リテラル指定となる

文字リテラルとする場合、↓のように引用符でくくると文字リテラルとして指定できます。

'a string'
"another string"

ただこれ

'1'
"1"

てやっても、計算とかするとき、数値リテラルに自動で変換されるみたいです。

このあたりの記事に書いてある

[SQLインジェクション][SQL]: SQLの暗黙の型変換はワナがいっぱい - 徳丸浩の日記(2009-09-24)

SQLの数値リテラルをシングルクォートでくくる手法について - とある技術屋の戯言

数値を引用符で囲った場合

「暗黙の型変換」が行われ、こんな変換ロジックとなる

#数値ではない文字がきられる
SELECT * FROM test WHERE id = '1あ';
↓
SELECT * FROM test WHERE id = 1;
#数値じゃなかったら0になる
SELECT * FROM test WHERE id = 'hoge';
↓
SELECT * FROM test WHERE id = 0;

ちなみに数値の部分をシングルクォーテーションなど、引用符でくくると、mysqlでは一応SQLインジェクション対策にはなる