假设我有一个名为'Customer'的表,列有很多列,我想显示所有姓名以'Thomas'结尾的客户(Lastname ='Thomas')。以下查询显示空结果(无行)。它也没有显示任何错误。
SELECT * FROM Customer WHERE Lastname = 'Thomas';
执行以下查询时,会给我正确的结果。
SELECT * FROM Customer WHERE Lastname LIKE '%Thomas%';
我想知道我的第一个查询有什么问题。我在Npm使用sqlite3。下面是'.show'命令的结果(如果问题是配置的话)。
sqlite> .show
echo: off
explain: off
headers: on
mode: column
nullvalue: ""
output: stdout
separator: "|"
stats: off
width:
答案 0 :(得分:2)
所以查询将是
SELECT * FROM Customer WHERE trim(Lastname) LIKE 'Thomas';
取决于您的类型,可能您不需要第2点,因为可以在mysql manual中阅读
所有MySQL排序规则都是PADSPACE类型。这意味着所有CHAR MySQL中的VARCHAR值与VARCHAR值进行比较而不考虑任何值 尾随空格
但第1点可能是解决方案。实际上,如果你想避免问题,你应该将字符串与LIKE进行比较,而不是=。
如果您仍有问题,可能需要使用整理。
SELECT *
FROM t1
WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci; #using your real table collation
更多信息here但特别是'托马斯'你不应该需要它,因为它没有任何特殊字符。