5

Voteモデルには、検証があります。

validates_uniqueness_of :topic_id, :scope => [:user_id]

これは、開発ログで次の SQL に変換されます。

SELECT 1 AS one FROM `votes` WHERE (`votes`.`topic_id` = BINARY 2 AND `votes`.`user_id` = 1) LIMIT 1

BINARY2 (topic_id) の前にあるのはどこですか? そして、それはどういう意味ですか?

4

1 に答える 1

7

これは、文字同士ではなくバイト同士を比較する効率的な方法です。

あなたが言うの値を持つproductsレコードを持つvin_numberいくつかの列名)を持っているレコードと呼ばれるデータベーステーブルを持っていると仮定しますvin_number123456

これを実行した場合

select * from products where vin= '123456' 

select * from products where vin = '123456 '

どちらも同じ結果になります

2番目の選択のスペースに注意してください

しかし、バイナリでは比較

select * from products where vin= BINARY '123456'

また

select * from producst where vin = BINARY '123456 '

バイトごとの一致は、文字ごとに行われます

したがって、最初のものは結果にvalidなります

2番目のものは結果にならない

これについてさらに役立つリンクはこちら

于 2012-06-21T14:25:00.610 に答える