【问题标题】:MYSQL special chars issueMYSQL 特殊字符问题
【发布时间】:2012-04-28 02:46:24
【问题描述】:

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

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

问题:如何解决输入存档和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. 关于正在导入的文件: 我已经打开了带有 3 个字符集的开放式办公室的文件:

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

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

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

【问题讨论】:

  • 您如何查看您所看到的“?”数据?
  • 我已经编辑了您的帖子,但不清楚LINES TERMINATED BY 之后的字符是什么意思。我不认为这有什么不同,但如果我弄错了,请更改它!

标签: java mysql sql jdbc character-encoding


【解决方案1】:

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 系统变量指示的字符集用于解释文件中的信息。

【讨论】:

  • 感谢您的回答,我为解决不兼容所做的工作是:1)将我的数据库设置为 utf-8。 2)在查询中添加“字符集LATIN1”以导入我的文件。我不知道我是否正确,但似乎 '2)' 强制 mysql 将文件读取为 LATIN1。无论如何,它在几个月后解决了我的问题。案件已结案!
【解决方案2】:

使用标准 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 中):


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

第二 - 如果文件没问题,添加 Java 代码以将数据发送到 MySql。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 2016-09-04
    • 2011-04-19
    • 2016-03-07
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多