MySQL findet keine numerischen Daten in varchar Feldern

Sprint

Erfahrenes Mitglied
Hallo zusammen,

mysql soll bei mir ganz einfach Teile von Telefonnummern finden. Diese stehen in varchar Feldern, damit auch Leerzeichen oder Bindestriche mit eingesetzt werden können. Eigentlich eine ganz einfache Sache, aber mysql findet bei mir keinen einzigen Datensatz.
Code:
SELECT * FROM kunden WHERE vortel1 like '%043%' or tel1 like '%043%'

SELECT * FROM kunden WHERE vortel1 = '0043'
Eigentlich zwei ganz einfache Anweisungen, es werden aber immer leere Ergebnisse zurückgegeben, obwohl mehrere Datensätze existieren, die 0043 in einem Feld haben. Ist in dem Suchbegriff aber z.B. ein Leerzeichen mit drin, wird der passende Datensatz gefunden.
Warum funktionieren diese Anweisungen nicht und wie kann man das umgehen? Kann mir das bitte jemand verraten?

Danke schonmal im Voraus,
Sprint
 
Ich kann das leider nicht reproduzieren.

SQL:
#Server version: 5.1.49-1ubuntu8.1 (Ubuntu)

CREATE TABLE test (name VARCHAR(100));

INSERT INTO test (name)  VALUES ('1');
INSERT INTO test (name)  VALUES ('01');
INSERT INTO test (name)  VALUES ('001');

SELECT * FROM test;
+------+
| name |
+------+
| 1    |
| 01   |
| 001  |
+------+


SELECT * FROM test WHERE name LIKE '%1%';
+------+
| name |
+------+
| 1    |
| 01   |
| 001  |
+------+


SELECT * FROM test WHERE name LIKE '%01%';
+------+
| name |
+------+
| 01   |
| 001  |
+------+
 
Sehr merkwürdig. Mit deinen Testdaten geht es bei mir auch. Mit den anderen Daten nicht. Und das auf zwei verschiedenen Systemen. Sowohl lokal als auch auf dem Server ist es das gleiche Verhalten. Er findet keinen rein numerischen Wert. Eine Suche z.B. nach "%12 34%" hingegen funktioniert.
 
Ich habe zum Testen mal die relevanten Daten extrahiert. Probier es doch bitte mal damit, ob es dann bei dir immer noch funktioniert.
Code:
CREATE TABLE `test2` (`vortel1` varchar(10), `tel1` varchar(30));

INSERT INTO `test2` VALUES('0034', '987247925');
INSERT INTO `test2` VALUES('0039', '0425590604');
INSERT INTO `test2` VALUES('0034', '977130037');
INSERT INTO `test2` VALUES('00420602', '402174');
INSERT INTO `test2` VALUES('0039', '1234');
INSERT INTO `test2` VALUES('003155', '5395395');
INSERT INTO `test2` VALUES('0034', '977154248');
INSERT INTO `test2` VALUES('0033', '680047392');
INSERT INTO `test2` VALUES('0034', '972396909');
INSERT INTO `test2` VALUES('0034', '977155136');
INSERT INTO `test2` VALUES('00352', '26483910');
INSERT INTO `test2` VALUES('0033', '556978260');
INSERT INTO `test2` VALUES('0033', '384 517966');
INSERT INTO `test2` VALUES('0033', '556440655');
INSERT INTO `test2` VALUES('030', '78715511');
INSERT INTO `test2` VALUES('04101', '8317268');
INSERT INTO `test2` VALUES('0033', '254 46 17 40');
INSERT INTO `test2` VALUES('00421', '25 26 355 02');
INSERT INTO `test2` VALUES('0039', '0645213423');
INSERT INTO `test2` VALUES('0039', '1234567890');
INSERT INTO `test2` VALUES('0033', '140 701630');
INSERT INTO `test2` VALUES('00352', '22558877');
INSERT INTO `test2` VALUES('0039', '0474 656270');
INSERT INTO `test2` VALUES('0033', '562 622921');
INSERT INTO `test2` VALUES('030', '8687590');
INSERT INTO `test2` VALUES('0033', '11111');
INSERT INTO `test2` VALUES('0033', '637265607');
 
Bei mir noch immer das erwartete Verhalten. Welches character set benutzt du? Mir fällt sonst nichts mehr dazu ein.

SQL:
SELECT * FROM test2 WHERE vortel1 like '%03%' or tel1 like '%03%';

+---------+--------------+
| vortel1 | tel1         |
+---------+--------------+
| 0034    | 987247925    |
| 0039    | 0425590604   |
| 0034    | 977130037    |
| 0039    | 1234         |
| 003155  | 5395395      |
| 0034    | 977154248    |
| 0033    | 680047392    |
| 0034    | 972396909    |
| 0034    | 977155136    |
| 00352   | 26483910     |
| 0033    | 556978260    |
| 0033    | 384 517966   |
| 0033    | 556440655    |
| 030     | 78715511     |
| 0033    | 254 46 17 40 |
| 0039    | 0645213423   |
| 0039    | 1234567890   |
| 0033    | 140 701630   |
| 00352   | 22558877     |
| 0039    | 0474 656270  |
| 0033    | 562 622921   |
| 030     | 8687590      |
| 0033    | 11111        |
| 0033    | 637265607    |
+---------+--------------+
 
Die Tabelle war auf latin1 eingestellt. Hab dann auf utf8 gewechselt, brachte aber keine Änderung.
 
So, mit viel Probieren hab ich zumindest herausgefunden, wie ich das Problem umgehen kann. Wenn die doppelten Nullen in den Vorwahl-Feldern gegen die übliche + Schreibweise austausche, also +34 statt 0034, dann geht es. Das erklärt aber noch immer nicht, warum MySql so reagiert.
 
Zurück