Mysqlデータベースの接続照合を変更するにはどうすればよいですか?
Mybuntu 14でMysql workbench 5.5とmysql 5.5を使用しています。
ストアドプロシージャを実行すると、エラーが発生します。
エラーコード:1267。操作 '='の照合(utf8_general_ci、IMPLICIT)と(utf8_unicode_ci、IMPLICIT)の不正な組み合わせ
修正するという一時的な解決策があるインターネットで検索しています
COLLATE utf8_unicode_ci;
ストアドプロシージャ内。
しかし、私は将来、すべてのストアドプロシージャについてこの問題を修正したいと考えています。見つけた
SHOW VARIABLES LIKE 'collation%';
これを返します。
collation_connection utf8_general_ci
collation_database utf8_unicode_ci
collation_server latin1_swedish_ci
どうすれば変更できますかutf8_general_ci
からutf8_unicode_ci
?
my.cnf
を調べ、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
次に、照合変数を次のように変更します。
collation_connection utf8_unicode_ci
collation_server latin1_swedish_ci
MySQLサーバーサービスを再起動することを忘れないでください。
DB照合では、次のSQLを使用できます。
ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
または、MySQL WorkbenchのAlterデータベース画面で行うことができます(常にこれを最新バージョンに更新してください!)
まず、エラーメッセージは、ストアドプロシージャ(接続)の照合順序がテーブルと一致しないためだと思います。しかし、私は間違っていました。エラーの理由は、列の照合がテーブルの照合と一致しないためです。
私の場合、列の照合順序を「utf8_unicode_ci」に変更したいと思います。だから私はこのステートメントを実行しました:
alter table <YourTableName>
MODIFY <YourColumnName> VARCHAR(XXX) COLLATE 'utf8_unicode_ci';
照合順序を変更するとデータが失われる可能性があることに注意してください。私にとっては、一般-> Unicode、varchar
列にすべて英語が含まれています。なにもない。
さらに読む: 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