28

UTF8 でエンコードされたデータを mysql にインポートしてもうまくいきません。UTF8 文字が壊れています。たとえば、NöthnagelはNöthnagelと表示されます。

UTF-8 でエンコードされたデータを含むインポートを行うために、SQL ダンプ ファイルを作成しました。例えば:

INSERT INTO `users` VALUES(1, 'Fred','Nöthnagel');

ファイル内のöを表すバイトのシーケンスは c3 b6 であり、vim およびこれらの環境変数が設定されている bash シェルで正しく表示されるため、正しいと思われます。

$ env | grep -i utf
LANG=en_US.UTF-8
XTERM_LOCALE=en_US.UTF-8

mysql db は次のように作成されました。

mysql> CREATE DATABASE mydb CHARACTER SET utf8;

mysql テーブルは次のように作成されました。

CREATE TABLE `users` (  
    `id` int(11) NOT NULL AUTO_INCREMENT,  
    `first_name` varchar(30) NOT NULL,  
    `last_name` varchar(30) NOT NULL,
    PRIMARY KEY (`id`),  
    UNIQUE KEY `last_name` (`last_name`)  
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  

次のようにダンプファイルをインポートしています。

 mysql -u root -psecret mydb < mydump.sql

上記で足りないものを教えてください。

4

4 に答える 4

70

照合にも関係があるのではないかと思いますが、よくわかりません。私の場合、キリル文字をサポートしなければならなかったので、確かにそうでした。
これを試してください、私のために働いた:

  1. ターゲット データベースの作成中に初期照合を設定するutf8_general_ci

  2. SET NAMES 'utf8' COLLATE 'utf8_general_ci';SQLファイルの先頭に追加します

  3. 走るmysql -u root -p --default-character-set=utf8 yourDB < yourSQLfile.sql

もう 1 つ、データベースから UTF-8 データを適切に取得するには、接続文字列も変更する必要があります。例えば:

mysql.url=jdbc:mysql://localhost:3306/nbs?useJvmCharsetConverters=false&useDynamicCharsetInfo=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&useEncoding=true

さらに、私の問題が何であったかを見てください。

于 2012-11-05T14:54:41.457 に答える
12

この問題は、これを sql ファイルの先頭に追加することで解決されました。

SET NAMES utf8;
于 2012-11-05T15:18:25.760 に答える
1

私も同様の問題を抱えていました。データベースだけでなく、クライアント、接続、サーバーなど、UTF8である必要のある変数がいくつかあります。

この記事では、問題の解決策について説明します。説明されているソリューションは移植可能であるため、utf8だけでなく、他のすべての文字セットでも機能します。ニーズに合わせて変更する必要がある場合があります。

于 2012-11-05T14:57:57.690 に答える