MYSQL特殊字符问题

问题描述:

我一直有这个问题很长一段时间,我已经搜索了很多次的互联网解决方案,尝试了很多,但没有找到一个适当的解决方案。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

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

将标准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代码。