web-dev-qa-db-ja.com

Mysqlの接続照合を変更する方法

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

10
martin

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データベース画面で行うことができます(常にこれを最新バージョンに更新してください!)

7
Raptor

まず、エラーメッセージは、ストアドプロシージャ(接続)の照合順序がテーブルと一致しないためだと思います。しかし、私は間違っていました。エラーの理由は、列の照合がテーブルの照合と一致しないためです。

私の場合、列の照合順序を「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

0
martin