LIKE和=在MySQL中以相​​同的方式处理空间吗?

时间:2016-03-11 12:33:27

标签: mysql

运行MySQL查询时出现奇怪现象,该查询具有LIKE=的某些条件。

SELECT
    ...
FROM
    ...
WHERE
    products.productcode LIKE '590082QRV040'
    AND ...

由于某些原因,在数据库中,一些产品代码在末尾存储了一个空格字符(可能是在插入数据的地方缺少修剪)。例如,上面的产品代码实际上存储为'590082QRV040 '。奇怪的是,如果我使用以下条件运行查询:products.productcode LIKE '590082QRV040'没有匹配,但对于products.productcode = '590082QRV040'我得到了所需的结果。我只是想知道是什么原因。我认为LIKE=之间的区别在于LIKE中允许使用通配符。但现在我甚至没有通配符,所以这两者应该完全一样。

1 个答案:

答案 0 :(得分:4)

documentation在这一点上相当清楚:

  

根据SQL标准,LIKE基于每个字符执行匹配,   因此它可以产生与=比较运算符不同的结果:

     

。 。

     

特别是,尾随空格很重要,但事实并非如此   使用=运算符执行CHAR或VARCHAR比较:

我强烈建议您修复数据:

app.js
-------
import PersonService from './services/PersonService';
import HomeController from './controllers/HomeController';
var app = angular.module('myApp', []);
app.service('PersonService', PersonService).controller('HomeController', HomeController);

HomeController.js
-----------------
import PersonService from '../services/PersonService';
function HomeController($scope, PersonService){
    $scope.dept ='Department';  
    PersonService.getPerson().then(function(person) {
        $scope.person = person;
    });
}   
HomeController.$inject = ['$scope','PersonService'];
export {HomeController};

PersonService.js
----------------
import Person from '../model/Person';
class PersonService {
constructor($q) {
    this._$q = $q;
}

getPerson() {
    return this._$q.when(new Person(101, 'Test Person'));
}
}
PersonService.$inject = ['$q'];
export {PersonService};

Person.js
----------
class Person {
  constructor(id, name) {
    this.id=id;
    this.name = name;
  }
}
export { Person };