2

私は長い間この問題に悩まされてきました。解決策を求めてインターネットを何度も検索し、多くの方法を試しましたが、適切な解決策が見つかりませんでした。

どうすればいいのかわからないので、もし助けていただければ、とても感謝しています。
(私の下手な英語で申し訳ありません)。

質問:入力アーカイブと MYSql テーブルの間の文字セットの非互換性を解決するにはどうすればよいですか?

問題:自分のコンピューターからアーカイブをインポートすると、情報はデータベースに表示されますが、一部の文字が として('ã', 'ç', 'á', etc..)表示され?ます。

追加情報

  1. 私は MYSql を使用しています。バージョンと変数のステータスは次のとおりです。

    MySQL バージョン: 5.5.10  
    ホスト: ローカルホスト  
    ユーザー: ルート  
    ポート: 3306  
    サーバーのデフォルト文字セット: utf8  
    character_set_client : utf8  
    character_set_connection : utf8  
    character_set_database : utf8  
    character_set_filesystem : バイナリ  
    character_set_results : utf8  
    character_set_server : utf8  
    character_set_system : utf8  
    collat​​ion_connection : utf8_general_ci  
    collat​​ion_database : utf8_general_ci  
    collat​​ion_server : utf8_general_ci  
    完了タイプ: NO_CHAIN  
    同時挿入: 自動  
    
  2. 使用されているクエリは次のとおりです。

    LOAD DATA LOCAL INFILE 'xxxxx/file.txt' 
    INTO TABLE xxxxTable 
    FIELDS TERMINATED BY ';' 
    LINES TERMINATED BY ' ' 
    IGNORE 1 LINES
    ( status_ordenar,numero,newstatus,rede,data_emissao,inicio,termino,tempo_indisp
    , cli_afet,qtd_cli_afet,cod_encerr,uf_ofensor,localidades,clientes_afetados 
    , especificacao,equipamentos,area_ofens,descricao_encerr,criticidade,cod_erro
    , observacao,id_falha_perc,id_falha_conf,nba,solucao,falhapercebida,falhaconfirmada
    , resp_i,resp_f,resp_ue,pre_handover,falha_identificada,report_netcool,tipo_falha
    , num_notificacao,equip_afetados,descricao) 
    
  3. インポート中のファイルについて: 3 つの文字セットを持つオープン オフィスでファイルを開きました:

    UTF8 - 'ç'、'ã' などの代わりに奇妙な文字が表示されました...
    ISO-8859-1 - OK。
    WIN-1252 - わかりました。
    ASCII/US - OK。

  4. すでにテスト済み: データベースでいくつかの文字セットをテストしました: latin1、utf-8、ascii ですが、すべて同じ結果になりました ('á' や 'ç' などの代わりに ?)。

  5. 追加: Java JDBC で Java を使用して、クエリを生成して送信しています。

4

2 に答える 2

0

file.txt は ISO-8859-1 または Windows-1252 (これら 2 つは非常に似ています) で保存され、MySQL によって UTF-8 として解釈されます。これらは互換性がありません。

どうすればわかりますか?

  • ポイント 3 を参照してください。ISO-8859-1 または Windows-1252 として解釈された場合、ファイルは正しく表示されます。
  • ポイント1を参照してください。: character_set_database : utf8

解決策: ファイルを UTF-8 に変換するか、MySQL に ISO-8859-1 または Windows-1252 として解釈するように指示します。

背景: 入力した文字 (ã など) は Windows-1252 では 1 バイトの値であり、これらのバイトは UTF-8 では無効な値であるため、'?' (Unicode 置換文字) が生成されます。

MySQL ドキュメントからのスニペット:

LOAD DATA INFILE 構文

character_set_database システム変数によって示される文字セットは、ファイル内の情報を解釈するために使用されます。

于 2012-04-16T22:12:45.420 に答える
0

Windows 標準のメモ帳で文字を UTF-8 ファイルとして保存します (Notepad++ も OK)。

正確なファイルの内容:

「ã」、「ç」、「á」

MySQL バージョン: 5.5.22
データベース文字セット: utf8
データベース照合順序: utf8_general_ci

CREATE TABLE `abc` (
  `qwe` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8

コマンドでインポートされたデータ

LOAD DATA LOCAL INFILE 'C:/test/utf8.txt' 
INTO TABLE abc
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY ' ' 
IGNORE 1 LINES
( qwe) 

結果 (SQLyog に表示):
SQLyog結果


したがって、最初に、信頼できるエディター (メモ帳、メモ帳++) で元のファイルを確認する必要があります。ファイルが破損している場合は、別のファイルを取得する必要があります。

2 番目 - ファイルに問題がない場合は、MySql にデータを送信するための Java コードを質問に追加します。

于 2012-04-16T21:46:35.740 に答える