Shop Support News Archive - Shopbetreiber News -> Forum : ECB: SQL-FEHLER nach Suche mit Umlauten
Warum um Himmels mixt Du die Kollationen? Der Shop sollte mit einer Kollation laufen! Und zwar vorzugsweise UTF-8.
VanderVaart21
25.11.2009, 12:15
''>ZITAT(Ex-Entwickler @ Nov 24 2009, 21:23) 205721
Warum um Himmels mixt Du die Kollationen? Der Shop sollte mit einer Kollation laufen! Und zwar vorzugsweise UTF-8.
[/b]
Ich hab doch gar nichts getan :blink:
Habe auch bei der Installation UTF8 ausgewählt und habe niemals Latin1 oder so eingestellt
Ist es denn möglich dies jetzt zu ändern, dass die Suche wieder läuft, oder bin ich im Arsch ?
Kann es auch an den Dateien liegen wie z.B. die advanced_search das die vielleicht nicht unter utf8 gespeichert ist ?
''>ZITAT(VanderVaart21 @ Nov 25 2009, 13:15) 205957
''>ZITAT(Ex-Entwickler @ Nov 24 2009, 21:23) 205721[/snapback]
Warum um Himmels mixt Du die Kollationen? Der Shop sollte mit einer Kollation laufen! Und zwar vorzugsweise UTF-8.
[/b][/b][/quote]
Ich muss meinen Vorredner entschuldigen. Als Programmierer Sicht sind aber solche Aktionen immer zum Haare raufen, weil bei so etwas das Problem meist 30 cm vor dem Bildschirm sitzt.
''>ZITAT</div>
Ich hab doch gar nichts getan :blink:
[/b]
Und was hast du vor dem "nichts tun" gemacht?
Hast du möglicherweise ein Modul eingebaut, dass die Kollation ändert?
''>ZITAT</div>
Habe auch bei der Installation UTF8 ausgewählt und habe niemals Latin1 oder so eingestellt
[/b]
Warum meldet MYSQL dann einen Fehler?
''>ZITAT</div>
Ist es denn möglich dies jetzt zu ändern, dass die Suche wieder läuft, oder bin ich im Arsch ?
[/b]
ändern ja, Arsch nein
''>ZITAT</div>
Kann es auch an den Dateien liegen wie z.B. die advanced_search das die vielleicht nicht unter utf8 gespeichert ist ?
[/b]
Die DB speichert es so wie dessen Kollation eingestellt ist. Die ist verschieden, sagt ja auch Deine Fehlermeldung.
Wenn Du beim Einfügen in die DB zudem unterschiedliche Zeichensätze(locales) verwendest, kann es auch zu Zeichenproblemen kommen, was aber mit der offensichtlichen Lösung deines Problems nichts zu tun hat.
jay-ar
VanderVaart21
25.11.2009, 13:48
Also Danke erstmal für eure Antworten.
Mir ist das jetzt erst aufgefallen. Wie lange das Problem besteht, weiß ich daher nicht.
Mir hat die JTL-Wawi Software mal vieles kaputt gemacht. Dies könnte
es gewesen sein. Das das neue Template damit zutun hat ist ja eher unwahrscheinlich.
Also ich habe nichts mit der Kollation gemacht, bin ich mir ziemlcih sicher.
Habe Offene Warenkörbe, Geburtstagsmodul,Kundenerinnerungsmodul und ein RSS-Feed
Modul drinne, mehr nicht ! Dies aber auch schon ewig. Habe auch vor kurzem mal nen Testshop
hochgezogen und diese Datenbank habe ich noch. Die wurde auch auf UTF-8 eingestellt.
Diese zeigt aber auch bei z.B. products_content unter Kollation Latin1.
wie bei mir.
Also wie kann ich weiter vorgehen. Muss ich jetzt in die Datenbank und die Kollation ändern
bei den Tabellen die mir falsch angezeigt werden ?
Oder zerstöre ich damit nur einiges ?
So habe mir jetzt mal die Datenbank des neuen Testshops angeschaut und meine des Shops. Mir fällt auf das überall auch im Testshop
(dort wurde UTF-8 eingestellt) bei Kollation Latin1_german2_ci stehen hat nirgends utf-8
Daher liegt es wirklich an der Datenbank oder an den Dateien, dass ich die eventuell mit dem Texteditor geöffnet habe und dann auch damit
abgespeichert habe.
Was hat es damit zu tun bzw. was bedeutet das (das for operation "Like" ist gemeint) :
1267 - Illegal mix of collations (latin1_german2_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like' ich habe doch nicht like eingegeben
und übersetzt bedeutet das doch für Handlung "Like" oder ?
Autodidakt
25.11.2009, 14:17
Du hast einen Dump mit Produktdaten eingespielt?
Drop Table, Create Table, schon ist die Kollation wieder Latin1
VanderVaart21
25.11.2009, 14:30
''>ZITAT(Autodidakt @ Nov 25 2009, 15:17) 205982
Du hast einen Dump mit Produktdaten eingespielt?
Drop Table, Create Table, schon ist die Kollation wieder Latin1
[/b]
Dump laut Wikipedia = Auszüge aus einer Datenbank werden als Datenbankdump bezeichnet. Sie dienen als Backup oder können zur Migration genutzt werden.
Also meinst du damit ob ich ein Backup wieder eingespielt habe. Also es kam öfter vor
das ich die Datenbank geleert hatte und dann das Backup neu eingespielt habe. Falls du das
meinst "JA"
Drop Table, Create Table, schon ist die Kollation wieder Latin1 --- Also ich stehe voll auf dem Schlauch
was meinst du damit ?
Klares Jein! :rolleyes:
Wie ist die "Default" Einstellung der Datenbank? Also was für eine Kollation wird genommen, wenn man nichts explizit angibt?
Du kannst beim CREATE auch die zu verwendende Kollation mit angeben:
''>ZITAT</div>SQL-Befehl: SHOW CREATE TABLE `countries` ;
CREATE TABLE `countries` (
`countries_id` int(11) NOT NULL AUTO_INCREMENT,
`countries_name` varchar(64) NOT NULL,
`countries_iso_code_2` char(2) NOT NULL,
`countries_iso_code_3` char(3) NOT NULL,
`address_format_id` int(11) NOT NULL,
`status` int(1) DEFAULT '1',
PRIMARY KEY (`countries_id`),
KEY `IDX_COUNTRIES_NAME` (`countries_name`)
) ENGINE=MyISAM AUTO_INCREMENT=240 DEFAULT CHARSET=utf8[/b]
VanderVaart21
25.11.2009, 17:41
Wie ist die "Default" Einstellung der Datenbank? Also was für eine Kollation wird genommen, wenn man nichts explizit angibt?
---------------------------------------------------------------------------------------------
Wenn ich mich einlogge steht da: MySQL-Zeichensatz: UTF-8 Unicode (utf8)
Zeichensatz / Kollation der MySQL Datenbank UTF-8 Unicode (utf8)
Also schätze ich mal das die Default Einstellung der Datenbank UTF-8 ist
Oder täusch ich mich da ? Falls ja wo kann ich die Default Einstellung der Datenbank nachschaun ?
----------------------------------------------------------------------------------------------------
Du kannst beim CREATE auch die zu verwendende Kollation mit angeben:
SQL-Befehl: SHOW CREATE TABLE `countries` ;
CREATE TABLE `countries` (
`countries_id` int(11) NOT NULL AUTO_INCREMENT,
`countries_name` varchar(64) NOT NULL,
`countries_iso_code_2` char(2) NOT NULL,
`countries_iso_code_3` char(3) NOT NULL,
`address_format_id` int(11) NOT NULL,
`status` int(1) DEFAULT '1',
PRIMARY KEY (`countries_id`),
KEY `IDX_COUNTRIES_NAME` (`countries_name`)
) ENGINE=MyISAM AUTO_INCREMENT=240 DEFAULT CHARSET=utf8[/quote]
------------------------------------------------------------------------------------------------------------------
Ich bin anscheinend immer noch durch den Wind soll ich das jetzt eingeben in die Datenbank oder
war das nur zur Veranschauung ?
Verzeiht mir meine Unwissenheit :rolleyes:
VanderVaart21
26.11.2009, 13:15
So habe jetzt mal bisschen was an der Datenbank gemacht. Ihr meintet ja das ich das mit Drop und Create lösen kann. Also hab die ganzen Products Tabellen gelöscht. Vorher runtergeladen. Habe dann die ganzen SQL Datein erhalten. Habe diese dann wieder importiert und dort stand beim importieren:
Zeichencodierung der Datei ! Dort habe ich UTF-8 eingegeben (war schon ausgewählt)
und habe alle product Tabellen hochgeladen. Aber leider ist das Problem nicht behoben.
Hab ich da was falsch gemacht oder muss ich alle Tabellen löschen und in UTF-8 hochladen ?
Würde es was bringen wenn ich die ganze Datenbank neu einspiele in UTF-8 ?
Oder kann es doch an den Datein liegen, das die vielleicht schon die Umlaute umwandeln ?
VanderVaart21
27.11.2009, 11:17
Soo
habe das Problem zum Teil gelöst. Habe die Datenbank heruntergeladen und
alles was Latin1_german2 war in utf8_unicode_ci umgeschrieben.
Oder hätte ich lieber utf8_general nehmen sollen ?
Der Fehler wird nicht mehr angezeigt ! Das Problem jetzt nur ist das
er keine Umlaute findet, egal wie ich diese suche (ü, ue)
Habt ihr ein Tipp was ich noch machen kann ?
Schöne Grüsse
VanderVaart21
moinsen...
das problem kann durchaus entstehen wenn man aus einer alten "nicht UTF" sicherung importiert
für alle nicht UTF8 DB's kann man das mit einem kleinen fix in der advanced_search_result.php hinbiegen.
ist quick and dirty, aber funzt..
Zeile : ca 230 , in der default der case anweisung :
// looking for Umlaute?
$ent_keyword = htmlentities($search_keywords[$i]);
das wars :rolleyes:
msslovi0
30.11.2009, 15:34
''>ZITAT(macs-it @ Nov 30 2009, 15:09) 207082
// looking for Umlaute?
$ent_keyword = htmlentities($search_keywords[$i]);
[/b]
Findet dann halt nur nichts mehr, weil in der Datenbank 'Leberkäse' steht, du aber nach 'Leberkäse' suchst.
''>ZITAT(msslovi0 @ Nov 30 2009, 16:34) 207116
''>ZITAT(macs-it @ Nov 30 2009, 15:09) 207082[/snapback]
// looking for Umlaute?
$ent_keyword = htmlentities($search_keywords[$i]);
[/b]
Findet dann halt nur nichts mehr, weil in der Datenbank 'Leberkäse' steht, du aber nach 'Leberkäse' suchst.
[/b][/quote]
mal ganz angesehen davon das in meiner Datenbank IMMER "Leberkä se" stehen würde
( weil ich ein schönes, selbst programmiertes,smartes Importprogramm benutze) ist es völlig egal...
meine advanced_search_result.php findet ALLES, ob ä oder ä ist total wumpe :P
ok,ok, ich hätte alles posten müssen...mea culpa :rolleyes:
also...guckst du hier
************************HACK by Mac 08.04.09 to find "umlaute"
************************** /
****************************************default :
************************************************ // looking for Umlaute?
************************************************ $ent_keyword = htmlentities($search_keywords[$i]);
************************************************ $ent_keyword = ($ent_keyword != $search_keywords[$i]) ? addslashes($ent_keyword) : false;
************************************************ // addslashes once is enough ...
************************************************ $keyword = addslashes($search_keywords[$i]);
************************************************ $where_str .= " ( ";
************************************************ $where_str .= "pd.products_keywords LIKE ('%".$keyword."%') ";
************************************************ $where_str .= ($ent_keyword) ? "OR pd.products_keywords LIKE ('%".$ent_keyword."%') " : '';
************************************************ if (SEARCH_IN_DESC == 'true') {
************************************************** $where_str .= "OR pd.products_description LIKE ('%".$keyword."%') ";
************************************************** $where_str .= ($ent_keyword) ? "OR pd.products_description LIKE ('%".$ent_keyword."%') " : '';
************************************************** $where_str .= "OR pd.products_short_description LIKE ('%".$keyword."%') ";
************************************************** $where_str .= ($ent_keyword) ? "OR pd.products_short_description LIKE ('%".$ent_keyword."%') " : '';
************************************************ }
************************************************ $where_str .= "OR pd.products_name LIKE ('%".$keyword."%') ";
************************************************ $where_str .= ($ent_keyword) ? "OR pd.products_name LIKE ('%".$ent_keyword."%') " : '';
************************************************ $where_str .= "OR p.products_model LIKE ('%".$keyword."%') ";
************************************************ $where_str .= ($ent_keyword) ? "OR p.products_model LIKE ('%".$ent_keyword."%') " : '';
Aber schön das hier Leute so aufmerksam sind :)
cheers
mac
:icon_motz:
Hatte ich erwähnt das Software die versucht zu "denken" total bescheiden finde?
Selbst aus einem nicht geschlossen tag mach dieses Forum noch nen Umlaut.
Nicht mal als code deklariert funzt das, und das man seine Beiträge nicht editieren kann hilft auch
nicht die Stimmung zu heben
User zu gängeln wollen wir doch Billy 'the Bit' Gates überlassen, oder ? :lol:
vBulletin® v3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd.