2013-02-05 4 views
5

Si j'entre deux chaînes avec seulement un espace blanc. Je reçois ce message d'erreur:MYSQL disable Auto-Trim

ERREUR 1062: entrée en double '' pour la touche 'PRIMAIRE'

Comment puis-je désactiver "Auto-Trim"?

J'utilise cette Charset: uft8-uft8_bin et This Datatype: Varchar.

+1

Êtes-vous sûr que c'est un problème de compensation automatique? –

+0

Oui c'est une clé primaire et je ne suis pas sûr que c'est un problème de finition automatique .. Mais comment je peux ajouter Deux chaînes vides avec des longueurs différentes –

+0

Ma première question sera pourquoi entrer un espace vide dans la colonne? Est-ce nécessaire? Aussi si c'est nécessaire êtes-vous sûr que cette colonne devrait être une clé primaire? – Vijay

Répondre

6

Selon la documentation SQL 92, lorsque deux chaînes sont comparées, elles sont d'abord égales en longueur en remplissant la chaîne la plus courte avec des espaces.

Recherchez 8.2 <comparison predicate> dans le document.

If the length in characters of X is not equal to the length 
in characters of Y, then the shorter string is effectively 
replaced, for the purposes of comparison, with a copy of 
itself that has been extended to the length of the longer 
string by concatenation on the right of one or more pad char- 
acters, where the pad character is chosen based on CS. If 
CS has the NO PAD attribute, then the pad character is an 
implementation-dependent character different from any char- 
acter in the character set of X and Y that collates less 
than any string under CS. Otherwise, the pad character is a 
<space>. 

Donc en d'autres termes. Il ne s'agit pas de stocker la valeur avec la quantité d'espaces que vous avez entré, mais c'est la comparaison qu'il fait pour vérifier la clé primaire en double. Donc, vous ne pouvez pas avoir deux chaînes avec une quantité différente d'espaces agissent comme une clé primaire

+0

Merci d'avoir répondu. Pouvez-vous me dire comment je peux définir NO PAD? –

+0

Malheureusement MYSQL ne vous permet pas de le changer. Dans le manuel http://dev.mysql.com/doc/refman/5.5/en/char.html il est dit 'Tous les classements MySQL sont de type PADSPACE. Cela signifie que toutes les valeurs CHAR et VARCHAR dans MySQL sont comparées sans tenir compte des espaces de fin. –