web-dev-qa-db-ja.com

my.iniでcharacter_set_databaseとcollat​​ion_databaseをutf8に設定する方法は?

私はこの問題について多くのことをグーグルで調べました。要約すると、これは私のmy.iniは次のようになります。

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[client]
database = abcdef
user = root
password = XXXXXX
default-character-set = utf8

[mysql]
default-character-set=utf8

[mysqld]
character_set_server=utf8
max_connections = 200
init_connect='SET collation_connection = utf8_general_ci' 
init_connect='SET NAMES utf8' 

Cmd経由でmysqlにアクセスして次のコマンドを発行すると、show variables like "%character%";show variables like "%collation%";、これは私が得たものです:

+--------------------------+---------------------------------+
| Variable_name            | Value                           |
+--------------------------+---------------------------------+
| character_set_client     | utf8                            |
| character_set_connection | utf8                            |
| character_set_database   | latin1                          |
| character_set_filesystem | binary                          |
| character_set_results    | utf8                            |
| character_set_server     | utf8                            |
| character_set_system     | utf8                            |
| character_sets_dir       | D:\env\MySQL5.6\share\charsets\ |
+--------------------------+---------------------------------+
8 rows in set (0.00 sec)

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | utf8_unicode_ci   |
+----------------------+-------------------+

私はすでにMySQLサービスを再起動しているので、誰も私に変更方法に関するアイデアを教えてもらえますかcharacter_set_database と同様 collation_databaseからutf8?どうもありがとう。

26
Judking

これは、実際にはmy.cnf(またはこの場合はmy.ini)の設定ではありません。 mySQLは、データベースの独自の照合(作成時)からこの設定を取得します。目的のutf8エンコーディングでこのインラインを取得するには、次の操作を行います。

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;

次に、mysqlで再起動します(必要な場合は覚えておいてください)。

SHOW VARIABLES;

すべてがうまくいくはずです、願っています!


サイドノート:default-character-setは現在では非推奨(mySQL 5.5+)であり、設定ファイルをfidgetyにしているようです。

42
C Jones

私は要約をします:

使用可能な文字セット/照合順序を決定する

SHOW CHARSET;
SHOW COLLATION;

チェック文字セット

SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';

set charset(configure file-> my.cnf)

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

データベース/テーブルの文字セットを確認

SHOW CREATE DATABASE databasename;
SHOW CREATE TABLE tablename;

データベース/テーブルの文字セットを変更

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

データベース/テーブルの作成時に設定

CREATE DATABASE new_db CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
CREATE TABLE new_table (id INT) CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

:Mysqlでは、utf8は真のutf8ではないことを聞きました。utf8mb4は実際のutf8です。そのため、mysqlに保存できない特殊文字がある場合は、utf8mb4およびutf8mb4_general_ciを使用する必要があります

17
tinyhare

Character SetおよびCollationの設定方法。

デフォルトのMySQL文字セットと照合(latin1, latin1_swedish_ci)を使用してデータを保存するアプリケーションの場合、特別な構成は必要ありません。アプリケーションが異なる文字セットまたは照合を使用したデータストレージを必要とする場合、いくつかの方法で文字セット情報を設定できます。

  • データベースごとに文字設定を指定します。たとえば、1つのデータベースを使用するアプリケーションにはutf8が必要な場合がありますが、別のデータベースを使用するアプリケーションにはsjisが必要な場合があります。
  • サーバーの起動時に文字設定を指定します。これにより、サーバーは、他の配置を行わないすべてのアプリケーションに対して指定された設定を使用します。
  • ソースからMySQLをビルドする場合、構成時に文字設定を指定します。これにより、サーバーは、サーバーの起動時に指定することなく、すべてのアプリケーションに対して指定された設定を使用します。

Utf8文字セットを設定するための質問に対してここに示されている例は、ここでも、より役立つように照合を設定します(utf8_general_ci collat​​ion`)。

データベースごとに文字設定を指定する

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

サーバーの起動時に文字設定を指定します

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

MySQL構成時に文字設定を指定します

Shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

これは長い答えかもしれませんが、すべての方法があり、使用できます。私の答えがお役に立てば幸いです。詳細については http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html

7
Vipin Jain