Comparaison de chaîne d'exact dans la requête MySQL

J'ai créé une table comme ça dans MySQL:

DROP TABLE IF EXISTS `barcode`;
CREATE TABLE `barcode` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


INSERT INTO `barcode` VALUES ('1', 'abc');

INSERT INTO `barcode` VALUES ('2', 'abc ');

Puis-je interroger les données de la table de codes à barres:

SELECT * FROM barcode WHERE `code` = 'abc ';

Le résultat est:

+-----+-------+
|  id | code  |
+-----+-------+
|  1  |  abc  |
+-----+-------+
|  2  |  abc  |
+-----+-------+

Mais je veux que le résultat est à seulement 1 enregistrement. J'solution de contournement:

SELECT * FROM barcode WHERE `code` = binary 'abc ';

Le résultat est 1 enregistrement. Mais je suis en utilisant NHibernate avec MySQL pour la génération de requête à partir de la table de mappage. De sorte que la façon de résoudre ce cas?

La prochaine fois, regardez comment votre question va sortir (il y a une zone d'aperçu en dessous de votre zone de texte), et si elle ressemble à un gâchis, résoudre le problème :). Utilisez une quantité généreuse de la {} bouton sur le dessus pour le code.....
Pourriez-vous fournir NHibenate mappages, et les méthodes que vous utilisez pour générer une requête? Pourquoi utilisez-vous le natif SQL avec NHibernate. Je pense que vous devriez utiliser les Critères de l'API ou HQL.
à partir de la documentation: "Tous les MySQL classements sont de type PADSPACE. Cela signifie que toutes les valeurs CHAR et VARCHAR dans MySQL sont comparés, sans égard à toute trailing spaces">

OriginalL'auteur Tang Khai Phuong | 2012-04-27