2013-03-30 9 views
6

を設定します。mysqldumpをエクスポートしたデータは、私は私のMySQLデータベースをエクスポートし、私のようなダンプ内のいくつかの非常に奇妙な文字が見つかった最初の時間のために昨日

INSERT INTO `piwik_archive_blob_2013_01` VALUES (15,'Actions_actions_url_6',1,'2013-01-17','2013-01-17',1,'2013-01-20 07:36:53','xuNM0ý/œ#&ÝÕ³\ZõNYpÊÀì#!üw7Hж}°ÀAáZoN*šgµ\'GWª[Yûðe¯57 ÃÁÆ7|Ÿ\'Ü%µDh©-EÛ^ËL±ÕÞtª[email protected](,b±ßZ.ÒÃ6b²aiÓÍ)87[­ïÎœ,æya¥uÒ<|+íª7MNuïÝ¿8ñ%1Ʊ>Ú­X'); 

私のサーバーのMySQLのバージョンを次のとおりです。5.1 .66-0 + squeeze1(Debian)。 このデータベースは、Piwikセットアップスクリプトによって自動的に作成されました。

#1 まず私は、データベースの文字セットを確認:ここ

は、私はこの問題を解決しようとしたものです。

> show table status; 

26個のテーブルには、正常に聞こえる照合utf8_general_ciがあります。 は、私は別の文字セットでエクスポートmysqldumpを推測 だから私は試してみました(LATIN1を?):

mysqldump -u user -p**** --all-databases --default-character-set=utf8 | gzip -9 > dump.sql.gz 

結果 =私はまだ同じ奇妙な文字を持っていました。

注)後で、私は、サーバのデフォルトの文字セットに関係なく、mysqldumpのデフォルトの文字セットがutf8であることを知りました。だから--default-character-set=utf8は役に立たなかった。

#2 次に、私はmysql confを更新することで問題を解決できると考えました。元CONFだった:

mysql> show variables like "%character%";show variables like "%collation%"; 

+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | latin1      | 
| character_set_connection | latin1      | 
| character_set_database | latin1      | 
| character_set_filesystem | binary      | 
| character_set_results | latin1      | 
| character_set_server  | latin1      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
+----------------------+-------------------+ 
| Variable_name  | Value    | 
+----------------------+-------------------+ 
| collation_connection | latin1_swedish_ci | 
| collation_database | latin1_swedish_ci | 
| collation_server  | latin1_swedish_ci | 
+----------------------+-------------------+ 

だから私は/var/lib/mysql/my.cnfを更新し、私がコメントを追加しました:

[mysqld] 
init_connect='SET collation_connection = utf8_general_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_general_ci 
default-character-set=utf8 
default-collation=utf8_general_ci 

[mysqldump] 
default-character-set=utf8 

その後

/etc/init.d/mysql restart 
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  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
+----------------------+-------------------+ 
| Variable_name  | Value    | 
+----------------------+-------------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | latin1_swedish_ci | 
| collation_server  | utf8_general_ci | 
+----------------------+-------------------+ 

結果 =同じ奇妙な文字が。

#3 私はcharacter_set_databasecollation_databaseを変更:

mysql> ALTER DATABASE piwik default character SET utf8 collate utf8_general_ci; 

mysql> show variables like "%character%";show variables like "%collation%"; 

+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8      | 
| character_set_connection | utf8      | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8      | 
| character_set_server  | utf8      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
+----------------------+-----------------+ 
| Variable_name  | Value   | 
+----------------------+-----------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | utf8_general_ci | 
| collation_server  | utf8_general_ci | 
+----------------------+-----------------+ 

結果 =同じ奇妙な文字が。

#4 私は今理解し、私は、データベースを作成する前にをUTF8にMySQLの(latin1の)にデフォルトの文字セットを変更している必要があります。

照合utf8_general_ci(#1)は、データがutf8に格納されていることを意味します。しかし、mysqldumpはデータがlatin1に格納されていると考え、utf8でデータをエンコードする可能性はありますか? 最終的には、データは2倍にエンコードされています(sigh)。この場合、どうすれば問題を解決できますか?

ありがとうございました。

ps)なぜ私はPiwikがデータベースのデフォルトの文字セットをutf8に変更する必要がないのだろうかと思います。

+0

何*はず*あなたはそれらの文字を見ているところも?どのようにこれらの文字を正確に見ていますか? – deceze

+0

ZendStudioでSQLファイルを開くと、これらの文字が表示されます。 –

+0

あなたはそこにいると思われるデータは何ですか? – deceze

答えて

0

テーブル名 "piwik_archive_ blob _2013_01"によると、奇妙な文字を含む列はBLOB型であると思います。

BLOB列にはバイナリデータが含まれています。だからこそ、これらの奇妙な文字が含まれています。これは予想されます。

MysqlDumpはこのデータをダンプする方法を知っています。

乾杯、 Eric。

+0

あなたはmysqldumpが何をしているのか知っていません...それは非常に知的ではなく、喜んで行いますインポートに慎重なアンボーキングが必要なborkedファイルを生成します。 –

+0

- hex-blobは、バイナリデータではこれに対して一般的に動作します。この答えは –

0

オペレーティングシステムが、エクスポート中にcharsetを変更し、default-character-setパラメータを無視している可能性があります。

は、輸出がこの記事をパラメータ結果ファイル

チェックをオペレーティングシステムの文字セットの使用を使用していないことを確認します: http://nathan.rambeck.org/blog/1-preventing-encoding-issues-mysqldump

+0

今日の時点では、リンクが壊れているようだと文字セットソリューションは、ブロブのために動作しません – superjos

関連する問題