2016-08-15 2 views
3

Wie kann ich Verbindungszusammenstellung von MySQL-Datenbank ändern?Wie ändert man die Verbindungskollation von Mysql

Ich bin mit MySQL Workbench 5.5 und MySQL 5.5 in Ubuntu 14.

Wenn ich eine gespeicherte Prozedur ausführen, tritt ein Fehler auf:

Fehlercode: 1267. Illegal Mix von Sortierungen (utf8_general_ci, iMPLIZIT) und (utf8_unicode_ci, iMPLIZIT) für den Betrieb ‚=‘

ich aber im Internet suchen haben, die eine temporäre Lösung hat, die

zu ändern ist
COLLATE utf8_unicode_ci; 

in der gespeicherten Prozedur.

Aber ich möchte dieses Problem für alle gespeicherten Prozeduren in Zukunft beheben. Ich habe

SHOW VARIABLES LIKE 'collation%'; 

gefunden, die das zurückgeben.

collation_connection utf8_general_ci 
collation_database utf8_unicode_ci 
collation_server latin1_swedish_ci 

wie kann ich utf8_general_ci zu utf8_unicode_ci ändern?

+0

Zu allererst Ihre MySQL Workbench Version ist viel zu alt. Aktualisieren Sie es vor dem erneuten Versuch. – Raptor

+0

Lassen Sie uns die Abfrage sehen, die die Fehlermeldung, plus 'SHOW CREATE TABLE' für die betroffene Tabelle erhalten. Auch "SHAR VARIABLES LIKE" char% '; '. –

Antwort

2

Schauen Sie in Ihre my.cnf, finden die Inhalte unten in der Nähe von collation_server:

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake 

Dies wird Ihre Sortiervariablen ändern:

collation_connection utf8_unicode_ci collation_server latin1_swedish_ci

Denken Sie daran, MySQL-Server-Dienst neu starten .

Für DB Sortierung, können Sie die folgende SQL verwenden:

ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

oder Sie können es auf Alter Datenbank Bildschirm in MySQL Workbench tun (! Immer diese auf die neueste Version aktualisieren)

+4

Beachten Sie, dass 'init_connect' ignoriert wird, wenn Sie als' root' verbinden. –

0

Erstens I denke, die Fehlermeldung ist wegen der Sortierung der gespeicherten Prozedur (Verbindung) nicht mit der Tabelle übereinstimmt. Aber ich lag falsch, der Grund für den Fehler liegt daran, dass die Sortierung der Spalte nicht mit der Sortierung der Tabelle übereinstimmt.

Ich möchte in meinem Fall zur Sortierung der Spalte zu 'utf8_unicode_ci' wechseln. So Ich habe diese Anweisung ausführen:

alter table <YourTableName> 
    MODIFY <YourColumnName> VARCHAR(XXX) COLLATE 'utf8_unicode_ci'; 

Bitte beachten Sie, dass Änderung des Vergleichs zu Datenverlust führen kann. Für mich, General -> Unicode, mit allen Englisch in varchar Spalte. Da ist gar nichts.

Weiterführende Literatur: http://dev.mysql.com/doc/refman/5.7/en/charset-column.html

http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html

http://dev.mysql.com/doc/refman/5.7/en/charset-database.html

Verwandte Themen