0

メール「test@gmail.com」をvarchar()またはtext()のいずれかであるDBに保存できるという奇妙な問題がありますが、メールに基づいて行を選択できません。別の識別子 (たとえば、「email_id」と呼ばれる主キー) を介して列を選択すると、ピリオドを含む電子メールを表示できます。また、「test@gmailcom」など、ピリオドを含まない varchar / text を含む email 列のある行を選択することもできます。

これをテスト DB とステージ DB に複製しました。クエリパネルからDBに直接挿入するときにこれをテストして複製したため、これもコードの問題ではありません。

私はそれをグーグルで試してみましたが、役に立ちませんでした。

編集:

varchar() や text() を正しく使用していますか? それは別のものであるべきですか?VarChar を使用するように述べている SO の投稿 (見つけられない) をいくつか見ました。

記録のために、挿入/選択にmysql WorkBenchを使用していますが、それによって違いが生じる場合があります。

編集2:

次の 2 つの記録があります。

client_id (PK, AI, INT, UNSIGNED), email (varchar(500), not null) 

の表でclient_login

client_id = 1, email = 'test@gmail.com' 

client_id = 2, email = 'test@gmailcom'

次の選択

select * from client_login where email='test@gmail.com'

0 行を返します

select * from client_login where email='test@gmailcom'

1 行を返します

編集3:

私もできる

select * from client_login where client_id=1

そして、それemail = 'test@gmail.com'はピリオドが行にあるかのように見えますが、実際にはピリオドではないため、奇妙な行を表示します...

4

2 に答える 2

2

率直に言って、私は問題が述べられている通りだとは思いません。

これが SQLFiddle で実行されている「問題」であり、正常に機能することを示しています。

メール欄のデータ、特に「ドット」の文字が思ったものと違うと思います。
手入力データで更新してみてください。


この問題のデバッグを支援するには、次のHEX()関数を使用して列の値を 16 進数として出力してみてください。

select HEX(email)

出力を注意深く検査します。

于 2012-11-28T01:36:57.000 に答える
0

サーバーの SQL モードを変更してみてください

http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

于 2012-11-28T00:31:55.597 に答える