2017-10-05 21 views
0

私は、シリルアルファベットをサポートするMySqlに奇妙な問題があります。データベースは最初からutf8_unicode_ciで作成されましたが、テーブルは作成されませんでした。現時点では、テーブルのデータは、このように表示されます。????????、utfでテーブルを作成しても問題はありませんが、既存のテーブルのエンコーディングを変更しようとするとMySqlデータベースが既存のテーブルをUTF8に変更しました

既存のデータまたは将来のデータを変更することになっている

ALTER TABLE Strategies 
    CHARACTER SET utf8, 
    COLLATE utf8_unicode_ci; 

を変更することになっている、それは動作しません

ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

。私は変数名LIKE 'character_set_の%' OR変数名LIKE '照合%' SHOWの変数を実行する場合、私はまたのmy.cnfファイルを変更し、

[mysqld] 
# 
#default-character-set=utf8 this one breaks mysql restart 
character-set-server=utf8 
skip-character-set-client-handshake 
collation-server=utf8_unicode_ci 
init-connect='SET NAMES utf8' 
init_connect='SET collation_connection = utf8_general_ci' 

に追加した

。私が取得:

enter image description here

私もPHPで直接UTFに私の管理者を変更し、それが実際にはテーブルがUTFであることを示しているが、何も既存のに起こりません?????????または将来のキリル文字入力に使用することができます。

うまくいけば、誰かがこの種の問題を経験していたらうれしいです。ありがとうございました。

+0

あなたは何のために手に入れますか?information_schemaのSELECT CHARACTER_SET_NAME、COLLATION_NAME。列はtable_schema = ''で、表名は ''です。 ? –

+0

問題のテーブル/列の*元の*エンコーディングは何ですか? – Binarus

+0

これは以前のlatin1_swedish_ciでした –

答えて

0

テーブルが出て起動した場合などにlatin1 は、その中にlatin1でエンコードされた文字を持っている、(あなたが行ったように)変換する前に

ALTER TABLE ... CONVERT TO CHARACTER SET utf8を使用し、古いエンコーディングをテストする2件の観光名所:

SHOW CREATE TABLE ... -- to see that the columns say latin1 
SELECT HEX(col) ... -- to see what the encoding looks like: é should show E9 

私はutf8をlatin1に誤って詰め込む可能性があるので、「前に」言う。 éはC3A9を表示すべきです - これは "二重エンコーディング"です。

SHOW CREATE TABLE ... -- to see that the columns say utf8 
SELECT HEX(col) ... -- to see what the encoding looks like; é should show C3A9 

C383C2A9がダブルエンコーディングを指定します:

も同様に後の変換を行います。混乱。あなたがrootとして、init-connectroot、他のSUPERのユーザーのために無視されて接続している場合

init-connect='SET NAMES utf8'に依存しないでください。

しかし、あなたはキリル文字をlatin1列に挿入するとしますか? latin1はラテン系西ヨーロッパの文字以外のものを表すことができないため、これは不可能です。だからあなたはおそらく "二重エンコーディング"を持っています。

デバッグの詳細については、Trouble with utf8を参照してください。特に "疑問符"に注意してください。

ダブルエンコーディングを修復するには、Fixesを参照し、該当するケースを選択します。このリンクには、にする必要があります(2ステップAlter)。

関連する問題