MySQLでグローバル文字セットを構成する方法


12

my.cnfを介してMySQLの文字セットを変更しようとしましたが、失敗しました。以下にリストされている文字セット設定を追加しました。

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# ------------- MYSQL CHARSETS --------------
character_set_system = utf8
character_set_server = utf8
character_set_results = utf8
character_set_database = utf8
character_set_connection = utf8
character_set_client = utf8

collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci

これらを有効にすると、MySQLが起動しませんでした。すべてがデフォルトでutf8になっていることを確認するにはどうすればいいですか?

更新

UTF8であることに問題があるいくつかの場所がまだあります

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

残念ながら、私はまだ解決策を思いついていません...何かアイデアはありますか?

現在、私はこの構成を正常に使用しています:

[mysqld]
default-character-set = utf8
init-connect='SET NAMES utf8'
character-set-server = utf8


[mysql]
default-character-set = utf8

しかし、PHPMyAdminはまだ一部のlatin1を表示しています

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

回答:


23

次をmy.cnfファイルに組み込む必要があります

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
default-character-set = utf8    
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

詳細については、次のマニュアルページを参照してください。

Markの回答に応じて、既存のテーブル/データベースを正しい文字セットに変換する必要がある場合は、適切なALTERクエリが必要になります。以下のようなもの:

ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

代わりに、あなたのためにそれを行う素晴らしいPHPスクリプトがここにあります。


私はまだいくつかの問題を抱えて...ドキュメントへのリンクをあなたの指示に従って確認しました(^参照)

私は追加するたびcollation-server = utf8_general_cimysqldセクションmysqlの再起動に失敗した

ログファイルの内容を確認できますか?失敗した理由に関するエラーメッセージが表示されます。あなたのmysqldはutf8の一般的な文字セットを含んでコンパイルされたと思いますか?

はい、それは...どのログファイルですか?

1
セクションのdefault-character-set = utf8下の行を除き、私(Debian 8、MySQL 5.5)で動作します[mysqld]。この行を追加すると、mysqldの再起動に永遠に時間がかかります。ただし、Unicodeサポートは、この行がなくてもうまく機能します。
低音

2

ベンの答えは大丈夫ですが、設定を変更しても、既存のテーブルの文字セットや照合順序は絶対に変更されません。適切なALTER TABLEステートメントでそれを行います。

指定しない場合、テーブルはデータベースのデフォルト文字セットで作成されることに注意してください。これはデータベースごとの設定で、ALTER DATABASEで調整できます。これはmy.cnfでも設定されていません。


1
ただし、新しいデータベースはデフォルトのmysql設定を継承しますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.