我已经有很长一段时间没有这个问题,我已经多次搜索互联网以寻求解决方案,尝试了很多但没有找到合适的解决方案。
我真的不知道该怎么做,如果你能帮助我,我会非常感激 (抱歉我的英语不好)。
问题:如何解决输入存档和MYSql表之间的字符集不兼容问题?
问题:从我的计算机上导入存档时,信息会显示在我的数据库中,但有些字符('ã', 'ç', 'á', etc..)
会显示为?
。
有条件的信息
我正在使用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
正在使用的查询是:
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个字符集:
UTF8 - 给我奇怪的字符代替'ç','ã'等......
ISO-8859-1 - 好的。
WIN-1252 - 好的。
ASCII / US - 好的。
已经测试过:我在我的数据库中测试了一些字符集:latin1,utf-8,ascii,但是所有这些都给了我相同的结果(?而不是'á','ç'等)。
额外:我正在使用Java和Java JDBC来生成和发送查询。
答案 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中):
所以,首先 - 您应该使用可靠的编辑器(记事本,记事本++)检查原始文件。如果文件损坏,那么你应该拿另一个文件。
第二 - 如果文件正常,请向您添加用于向MySql发送数据的Java代码。
答案 1 :(得分:0)
file.txt保存在ISO-8859-1或Windows-1252中(这两者非常相似),并被MySQL解释为UTF-8。这些是不相容的。
我怎么知道?
解决方案:将文件转换为UTF-8,或告诉MySQL将其解释为ISO-8859-1或Windows-1252。
背景:你提供的字符(ã等)是windows-1252中的单字节值,这些字节是UTF-8中的非法值,因此产生'?'(unicode替换字符)。
来自MySQL docs的片段:
LOAD DATA INFILE语法
character_set_database系统变量指示的字符集用于解释文件中的信息。