2

这个问题困扰我很久了,我在网上搜索了很多次,尝试了很多次,但没有找到合适的解决方案。

我真的不知道该怎么做,如果你能帮助我,我会非常感激。
(对不起我糟糕的英语)。

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

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

附加信息

  1. 我正在使用 MYSql,我的版本和变量状态是:

    MySQL 版本:5.5.10  
    主机:本地主机  
    用户:根  
    港口 : 3306  
    服务器默认字符集:utf8  
    character_set_client : utf8  
    字符集连接:utf8  
    字符集数据库:utf8  
    字符集文件系统:二进制  
    字符集结果:utf8  
    字符集服务器:utf8  
    字符集系统: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. 关于正在导入的文件:我已经用 open office 带有 3 个字符集打开了文件:

    UTF8 - 用奇怪的字符代替 'ç'、'ã' 等...
    ISO-8859-1 - 好的。
    WIN-1252 - 好的。
    ASCII/美国 - 好的。

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

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

4

2 回答 2

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 结果


因此,首先 - 您应该使用可靠的编辑器(记事本、记事本++)检查原始文件。如果文件损坏,那么你应该采取另一个文件。

其次 - 如果文件正常,请添加用于将数据发送到 MySql 的 Java 代码。

于 2012-04-16T21:46:35.740 回答
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 文档的片段:

LOAD DATA INFILE 语法

character_set_database 系统变量指示的字符集用于解释文件中的信息。

于 2012-04-16T22:12:45.420 回答