MYSQL特殊字符问题

时间:2012-04-16 18:42:50

标签: java mysql sql jdbc character-encoding

我已经有很长一段时间没有这个问题,我已经多次搜索互联网以寻求解决方案,尝试了很多但没有找到合适的解决方案。

我真的不知道该怎么做,如果你能帮助我,我会非常感激 (抱歉我的英语不好)。

问题:如何解决输入存档和MYSql表之间的字符集不兼容问题?

问题:从我的计算机上导入存档时,信息会显示在我的数据库中,但有些字符('ã', 'ç', 'á', etc..)会显示为?

有条件的信息

  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. 正在使用的查询是:

    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 - 好的。
    WIN-1252 - 好的。
    ASCII / US - 好的。

  4. 已经测试过:我在我的数据库中测试了一些字符集:latin1,utf-8,ascii,但是所有这些都给了我相同的结果(?而不是'á','ç'等)。

  5. 额外:我正在使用Java和Java JDBC来生成和发送查询。

2 个答案:

答案 0 :(得分: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代码。

答案 1 :(得分:0)

file.txt保存在ISO-8859-1或Windows-1252中(这两者非常相似),并被MySQL解释为UTF-8。这些是不相容的。

我怎么知道?

  • 参见第3点:解释为ISO-8859-1或Windows-1252时文件正确显示。
  • 见第1点: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系统变量指示的字符集用于解释文件中的信息。