2012-04-16 183 views
2

我一直有這個問題很長一段時間,我已經搜索了很多次的互聯網解決方案,嘗試了很多,但沒有找到一個適當的解決方案。MYSQL特殊字符問題

我真的鴕鳥政策知道該怎麼做,如果你能幫我我倒是很感激。
(對不起,我的英文很差)。

問題:如何解決輸入存檔和MYSQL表之間的字符集不兼容問題?

問題:當導入從我的計算機上的信息會出現在我的數據庫存檔,但有些字符爲('ã', 'ç', 'á', etc..)顯示爲?

aditional的信息

  1. 我使用MySQL,我的版本和可變狀態是:

     
    MySQL VERSION : 5.5.10 
    HOST : localhost 
    USER : root 
    PORT : 3306 
    SERVER DEFAULT CHARSET : utf8 
    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 
    collation_connection : utf8_general_ci 
    collation_database : utf8_general_ci 
    collation_server : utf8_general_ci 
    completion_type : NO_CHAIN 
    concurrent_insert : AUTO 
    
  2. 正在使用的查詢that's是:

    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 - 給我奇怪的字符在地方的「C」,「A」,等...
    ISO-8859-1 - OK 。
    WIN-1252 - 好的。
    ASCII/US - 確定。

  4. 已經測試過:我測試過一些在我的數據庫中的字符集:latin1,utf-8,ascii,但它們都給了我相同的結果(?而不是'á','ç'等)。

  5. 超:我使用Java和Java JDBC來生成和發送查詢。

+0

您如何查看您看到'?'的數據? – 2012-04-16 18:47:26

+0

我已經編輯了你的帖子,但是不清楚「LINES TERMINATED BY」之後的字符是什麼意思。我不認爲這有什麼區別,但如果我錯了,請改變它! – Ben 2012-04-16 18:54:57

回答

0

file.txt保存在ISO-8859-1或Windows-1252中(這兩者非常相似),並被MySQL解釋爲UTF-8。這些不兼容。

我怎麼知道?

  • 請參見第3點:當解釋爲ISO-8859-1或Windows-1252時,文件顯示正確。
  • 看點一:character_set_database:UTF8

解決方案:將文件轉換爲UTF-8,或告訴MySQL把它解釋爲ISO-8859-1或Windows 1252。背景:您提供的字符(ã等)是windows-1252中的單字節值,並且這些字節是UTF-8中的非法值,因此產生'?'(unicode替換字符)。

片段從MySQL docs

LOAD DATA INFILE語法

由character_set_database系統變量指示的字符集是用來解釋文件中的信息。

+0

感謝您的回答,我做了什麼來解決不兼容問題: 1)將我的數據庫設置爲utf-8。 2)將「字符集LATIN1」添加到查詢中以導入我的文件。 我不知道我是否正確,但似乎'2)'強制mysql讀取文件爲LATIN1。無論如何,它好幾個月後解決了我的問題。 案件關閉! – user1336900 2012-04-20 14:06:52

0

將標準Windows記事本中的字符保存爲UTF-8文件(Notepad ++也行)。

確切的文件內容:

 
'ã', 'ç', 'á' 

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 result


所以,首先 - 你應該檢查與可靠的編輯器(記事本,記事本++)原始文件。如果文件損壞,那麼你應該採取另一個文件。其次 - 如果文件正常,則向您添加用於向MySql發送數據的Java代碼。