0

値を0に設定すると実際に行が選択されることがわかったとき、私は混乱しました。O_o 0 は数値であり、文字列ではありません...それは私が知らなかったものですか? mysql の特定の機能か、何か間違っていますか?

クエリは次のとおりです。

SELECT * FROM contacts WHERE owner=0

結果は次のとおりです。

contact_id,owner,contact
10,d9659deb29f21dcf468783f1e7f52aa2b2ab6b48,7d1d00cd5cc06c27b3bcbefa8b4aeeb16bdec14e

テストダンプは次のとおりです。

-- --------------------------------------------------------
-- Host:                         127.0.0.1
-- Server version:               5.5.8 - Source distribution
-- Server OS:                    Linux
-- HeidiSQL version:             7.0.0.4053
-- Date/time:                    2012-08-02 11:05:48
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

-- Dumping database structure for test
CREATE DATABASE IF NOT EXISTS `test` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `test`;


-- Dumping structure for table test.contacts
CREATE TABLE IF NOT EXISTS `contacts` (
  `contact_id` int(10) NOT NULL AUTO_INCREMENT,
  `owner` varchar(40) DEFAULT '',
  `contact` varchar(40) DEFAULT '',
  PRIMARY KEY (`contact_id`),
  KEY `owner` (`owner`),
  KEY `contact` (`contact`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- Dumping data for table test.contacts: ~2 rows (approximately)
/*!40000 ALTER TABLE `contacts` DISABLE KEYS */;
REPLACE INTO `contacts` (`contact_id`, `owner`, `contact`) VALUES
    (9, '7d1d00cd5cc06c27b3bcbefa8b4aeeb16bdec14e', 'd9659deb29f21dcf468783f1e7f52aa2b2ab6b48'),
    (10, 'd9659deb29f21dcf468783f1e7f52aa2b2ab6b48', '7d1d00cd5cc06c27b3bcbefa8b4aeeb16bdec14e');
/*!40000 ALTER TABLE `contacts` ENABLE KEYS */;
/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
4

3 に答える 3

1

私の賭け: OWNER は予約済みのキーワードです。選択を次のように変更します

SELECT * FROM contacts WHERE contacts.owner=0 
于 2012-08-02T08:18:22.127 に答える
0

所有者「7d1d00cd5cc06c27b3bcbefa8b4aeeb16bdec14e」は数値「7...」で始まり、MySQLはこの値を7に変換します。7=0- FALSEです。

所有者'd9659deb29f21dcf468783f1e7f52aa2b2ab6b48'は文字'd...'で開始され、MySQLはこの値を0に変換するため、0=0- TRUEです。

これは、MySQLが文字列を数値に変換する方法です。

于 2012-08-02T08:21:54.887 に答える
0

数値を文字データ型列と比較するために引用符を使用します。

SELECT * FROM contacts WHERE owner = '0';

またはCAST関数を次のように使用して型キャストします。

SELECT * FROM contacts WHERE owner = CAST(0 AS CHAR);
于 2012-08-02T08:17:05.537 に答える