PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suite (Frage erledigt) Upgrade läuft durch aber nachher MySQL Fehler



Kolbi
06.01.2010, 12:04
Habe mein Testboard auf vB 4.0.0pl1 geupdatet und das Update lief ohne Probleme durch.

Nun bekomme ich aber im Board MySQL Fehlermeldungen:

http://localhost/blog.php

Database error in vBulletin 4.0.0:

Invalid SQL:

(SELECT 'package' AS classtype, package.packageid AS typeid, package.packageid AS packageid,
package.productid AS productid, if(package.productid = 'vbulletin', 1, product.active) AS enabled,
package.class AS class, -1 as isaggregator
FROM vb_package AS package
LEFT JOIN vb_product AS product
ON product.productid = package.productid
WHERE product.active = 1
OR package.productid = 'vbulletin'
)

UNION

(SELECT 'contenttype' AS classtype, contenttypeid AS typeid, contenttype.packageid AS packageid,
1, 1, contenttype.class AS class , contenttype.isaggregator
FROM vb_contenttype AS contenttype
INNER JOIN vb_package AS package ON package.packageid = contenttype.packageid
LEFT JOIN vb_product AS product ON product.productid = package.productid
WHERE product.active = 1
OR package.productid = 'vbulletin' );

MySQL Error : Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
Error Number : 1267
Request Date : Wednesday, January 6th 2010 @ 12:00:49 PM
Error Date : Wednesday, January 6th 2010 @ 12:00:50 PM
Script : http://localhost/blog.php
Referrer : http://localhost/forum.php
IP Address : 127.0.0.1
Username : Kolbi
Classname : vB_Database
MySQL Version : 5.1.37oder
http://localhost/content.php

Database error in vBulletin 4.0.0:

Invalid SQL:

(SELECT 'package' AS classtype, package.packageid AS typeid, package.packageid AS packageid,
package.productid AS productid, if(package.productid = 'vbulletin', 1, product.active) AS enabled,
package.class AS class, -1 as isaggregator
FROM vb_package AS package
LEFT JOIN vb_product AS product
ON product.productid = package.productid
WHERE product.active = 1
OR package.productid = 'vbulletin'
)

UNION

(SELECT 'contenttype' AS classtype, contenttypeid AS typeid, contenttype.packageid AS packageid,
1, 1, contenttype.class AS class , contenttype.isaggregator
FROM vb_contenttype AS contenttype
INNER JOIN vb_package AS package ON package.packageid = contenttype.packageid
LEFT JOIN vb_product AS product ON product.productid = package.productid
WHERE product.active = 1
OR package.productid = 'vbulletin' );

MySQL Error : Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
Error Number : 1267
Request Date : Wednesday, January 6th 2010 @ 12:00:51 PM
Error Date : Wednesday, January 6th 2010 @ 12:00:51 PM
Script : http://localhost/content.php
Referrer : http://localhost/forum.php
IP Address : 127.0.0.1
Username : Kolbi
Classname : vB_Database
MySQL Version : 5.1.37Das ist da falsch? :)

StGaensler
06.01.2010, 12:26
Hallo Kolbi,

du hast in der Datenbank unterschiedliche Zeichensätze - das sollte so nicht sein.
Das kannst du aber auch am laufenden Forum beheben: 39684

Einfacher geht es, wenn du das Backup von vor dem Update noch einmal einspielst, und dann den Datenbank-Zeichensatz genauso wählst, wie den Zeichensatz der Tabellen in der Datenbank, und dann das Update noch einmal ausführst. Neue Tabellen erben nämlich automatisch den Zeichensatz der Datenbank - und wenn der anders als der der bereits bestehenden Tabellen ist, kanns Probleme geben.

Freundliche Grüße

Stefan

Kolbi
06.01.2010, 12:35
Vielen Dank für den Hinweis!
Dann wird wohl meine lokale Datenbank die Collation: latin1_german1_ci gehabt haben. Meine (live) Datenbank latin1_swedish_ci.
Aber im Prinzip dürfte es beim Updaten des Live Boardes dann keine Probleme geben, da das Upgradeskript ja nur auf die Standartkollation konvertiert?
Sprich im Live Board wären die latin1_german1_ci (lokalen Testbereich) Tabellen zu latin1_swedish_ci geworden?

Gibt es ein SQL Query um jetzt für den Testbereich alle in eine Kollation zu ändern? :)
Oder geht dies auf mich der Wartungsfunktion mysql_schema einspielen?

Danke!!

Cybeth
06.01.2010, 12:43
Anscheinend übernimmt das Update nicht alle Tabellen und so hast man dann latin1_swedish_ci bzw. latin1_german1_ci.

Ich habe das ebenfalls schon local getestet. Tabellen sind latin1_german1_ci und das Update schreibt einige Tabellen in latin1_swedish_ci. Danach kommt es zu der o.g. Fehlermeldung.

Per mysql_char.php passe ich die Collation an.

Kolbi
06.01.2010, 12:52
Wo findest du die mysql.char.php ? :)

StGaensler
06.01.2010, 13:16
Aber im Prinzip dürfte es beim Updaten des Live Boardes dann keine Probleme geben, da das Upgradeskript ja nur auf die Standartkollation konvertiert?
Sprich im Live Board wären die latin1_german1_ci (lokalen Testbereich) Tabellen zu latin1_swedish_ci geworden?Das Upgradescript konvertiert da überhaupt nichts. Das Upgrade-Script sagt zum MySQL-Server "ich will ne neue Tabelle" und der MySQL-Server entscheidet sich dann, welchen Zeichensatz er dafür nimmt.

Gibt es ein SQL Query um jetzt für den Testbereich alle in eine Kollation zu ändern? :)Meines Wissens nicht, denn nicht nur die Tabellen haben einen Zeichensatz, sondern auch die Tabellenspalten. Entweder man macht das von Hand oder mit angesprochenem Script - oder man passt halt einmal auf, und stellt alles richtig ein :)

Oder geht dies auf mich der Wartungsfunktion mysql_schema einspielen?Nein, da dort auch keine Zeichensätze drinnenstehen.


Anscheinend übernimmt das Update nicht alle Tabellen und so hast man dann latin1_swedish_ci bzw. latin1_german1_ci.

Ich habe das ebenfalls schon local getestet. Tabellen sind latin1_german1_ci und das Update schreibt einige Tabellen in latin1_swedish_ci. Danach kommt es zu der o.g. Fehlermeldung.Wie bereits oben geschrieben... Lies dir das bitte noch einmal durch. Das vBulletin Update kann für verschiedene Zeichensätze nichts, da es alle Tabellen ohne speziellen Zeichensatz anlegt - das entscheidet der MySQL-Server, welcher Zeichensatz da genommen wird. Wenn ihr dann den Standard-Zeichensatz mittendrin (mitunter auch unabsichtlich oder durch den Hoster) ändert, kann es eben zu solchen Problemen kommen.

Freundliche Grüße

Stefan

Cybeth
06.01.2010, 13:17
Wo findest du die mysql.char.php ? :)

http://www.vbulletin-germany.com/forum/showthread.php?25037-Kollation-auf-einmal-umstellen&p=176559&viewfull=1#post176559

Kolbi
06.01.2010, 13:23
Soll ich dort nur die Standart-Kollation ändern oder auch

!!!Warning!!!
Selecting Yes might convert the data in the columns of the selected tables, this can not be undone. Use this only if you know what you are doing!!!
If Convert is not selected, no changes are made to columns, only the default collation for the table is altered.
die Daten der betroffenen Tables?

StGaensler
06.01.2010, 13:39
Hallo Kolbi,

wenn du nur die Standard Zeichensätze der Tabellen änderst, haben die Tabellenspalten immernoch den anderen (falschen) Zeichensatz - also bringt das nichts. Du musst also schon alles ändern :)

Freundliche Grüße

Stefan

Kolbi
06.01.2010, 13:51
Super, vielen Dank!

Wobei das Problem bei meinem Live Board wohl nicht auftreten wird.
Dann muss ich ja nur noch auf vB 4.0.1 warten :)

StGaensler
06.01.2010, 14:12
Wobei das Problem bei meinem Live Board wohl nicht auftreten wird.Auf ne Vermutung würde ich mich nicht verlassen, ich würde mir die Mühe machen, und die paar Sekunden opfern, und mal mit phpMyAdmin den Zeichensatz meiner Datenbank nachsehen. Wieso sollte man es "drauf ankommen lassen", wenn man schon im Vorhinein sicherstellen könnte, dass das Problem nicht auftauchen wird?

Freundliche Grüße

Stefan

Kolbi
06.01.2010, 14:18
Wo sehe ich das im phpmyadmin?

MySQL-Zeichensatz: UTF-8 Unicode (utf8)
Zeichensatz / Kollation der MySQL-Verbindung: utf8_general_ci
steht da wobei der Zeichensatz / Kollation der MySQL-Verbindung nen Dropdown Menü ist.

Okay mal eben nachgeschaut, alle Tabellen sind "latin1_german1_ci" außer 3 die von einem Addon stammen, die sind utf8_bin.

StGaensler
06.01.2010, 14:26
Wo sehe ich das im phpmyadmin?Wenn du die Liste der ganzen Tabellen siehst (Struktur-Tab der Datenbank), steht ganz unten in der letzten Zeile die Aufsummierung der Größe/Tabellenanzahl/... und einen Zeichensatz. Das ist der Zeichensatz der Datenbank. Ändern (und auch ansehen) kannst du ihn im Operationen-Tab, dort ist er bei mir als letzter Punkt aufgeführt.

Freundliche Grüße

Stefan

Kolbi
06.01.2010, 15:02
Ist dann wohl auch: latin1_german1_ci

Machen kann ich da derzeit nicht viel, da ich immer noch ein Webhostingpaket bei Strato habe :)

Danke!