我有一個非常複雜的問題的列表,但我將範圍縮小到這一點,首先,讓我給你一些測試數據:用逗號MySQL的奇怪的行爲分隔的數字
運行以下命令:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
INSERT INTO test (value) VALUES
(1),
('1'),
('1,2'),
('3');
現在運行此查詢:
SELECT * FROM test WHERE value = 1;
我希望在這種情況下,得到的只有前兩排,其中值,可以以數字1或「1」字符輸入,但由於某種原因,這是我得到:
1, 1
2, 1
3, 1,2
我的問題是,爲什麼我得到第三行?
注:這是我的MySQL版本:5.6.28-0ubuntu0.14.04.1
而且,我已經用FIND_IN_SET解決了我原來的問題,我知道,這不是有一個很好的主意這個以逗號分隔的列表類型結構,也就是說,它應該首先用連接表完成。不幸的是,我正在一個非常大的系統中工作,目前這種變化是不實際的。
我只是對這種特定行爲發生的原因感興趣。
我們可以改爲拒絕問題的前提?不要以逗號分隔的數字列表開頭。 – Strawberry
@Strawberry:無論存儲以逗號分隔的數字列表是否是個好主意,這都是一個很好的問題。行爲是意想不到的。 – recursive
您是否嘗試過InnoDb表格格式相同的行爲? – Whome