0

latin_1からに変換する必要があるデータベースが 1 つありますutf8。この変換は問題ありません。私のステージング環境では、my.cnf に次の行を追加すると、すべてが正しく機能します (この SO の質問で提案されているように):

[client]
default-character-set = utf8

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

そして、適切な ALTER ステートメントを実行します。

ALTER TABLE {row} CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

残念ながら、このデータベースは MySQL サーバーだけにあるわけではありません。サーバーは、まだエンコーディングを使用しているいくつかのデータベースと共有されておりlatin_1、これらのデータベースは実際には必要ありませんutf8。異なるエンコーディングで同じサーバーを共有できますか? これを行うには、デフォルトの構成を変更する必要がありますか? それとも、これはトラブルを求めていますか?

4

1 に答える 1

3

実際のデータのエンコーディングは列ごとに行われます。つまり、すべてのテーブルのすべての列が異なるエンコーディングを持つ可能性があります。データは、個々のクライアントが持つ接続エンコーディングとの間でオンザフライでトランスコードされます。各クライアントは異なる接続エンコーディングを持つことができ、各クライアントはオンザフライで接続エンコーディングを変更できます。構成ファイルを変更する必要はありません。実際、これはデフォルトに依存するクライアントの動作に影響を与える可能性があるため、そうすべきではありません。

クライアントに独自のエンコード設定を設定するだけで問題ありません。詳しくはこちらをお読みください。

于 2013-05-10T17:12:11.833 に答える