CharSequenceはインターフェース

String型を指定したい部分にCharSequenceって出てきたので
なによと思ったのですが、どうやらインターフェースみたいです。

公式リファレンスを見てみると以下のような説明が書かれています。
>char シーケンスへの統一された読み取り専用アクセスを提供します。

なるほどね。

ちなみにこのインターフェースを実装しているクラス一覧は以下の通り。

  • String
  • CharBuffer
  • StringBuffer
  • StringBuilder

たまに引数の型で出てくるので覚えておくといいかもしれません。

MySQLが文字列と数値の比較の際に自動的に変換してしまう件

WHERE句などでint型とchar型を比較すると、
どうやら暗黙的に型変換しちゃう罠があるみたいです。

PHPもそうですが、文字列と数値の比較では、
暗黙的に数値型に変換したうえで比較を行うようです。

例えばproductsテーブルがあったとして、
product_idが主キーでint型だったとします。
そのテーブルに、IDが10番のデータが登録されているとします

残念なことに以下のWHERE句の判定はtrueになってしまいます。

SELECT * FROM products WHERE product_id = '10 a'

char型の「10 a」がint型の「10」に暗黙的に型変換されるからです。
ということでちゃんと比較するにはキャストをして型を合わせます。

SELECT * FROM products WHERE CAST(product_id AS CHAR) = '10 a'

今回はCHAR型ですが、数値型(INTEGER)の場合は符号の有無によってSIGNEDやUNSIGNEDを指定します。
変換できる型についてはキャスト関数と演算子(MySQL5.1)を参照するといいです。
挙動を理解していないとセキュリティホールの元になりますね。

少しはまったしまったのでメモしておきます。