MYSQL特殊字符的问题(MYSQL special chars issue)

2019-09-16 14:29发布

从来就一直有这个问题很长一段时间,从来就在网上搜索很多次的解决方案,尝试了很多人,但没有找到适当的解决方案。

我真的鸵鸟政策知道该怎么做,如果你能帮我我倒是很感激。
(对不起,我英文不好)。

问:我怎样才能解决这个输入档案和MySQL表之间的字符集不兼容?

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

aditional的信息

  1. 我使用MySQL,我的版本和可变的状态是:

      MySQL版本:5.5.10    主持人:本地主机    USER:根    端口:3306    服务器的默认字符集:UTF-8    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    collat​​ion_connection是:utf8_general_ci    collat​​ion_database查看:utf8_general_ci    collat​​ion_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 - 确定。
    WIN-1252 - 确定。
    ASCII /美国 - 确定。

  4. 已经测试:从来就在我的数据库测试了一些字符集:latin1的,UTF-8,ASCII,但他们给了我同样的结果(而不是“A”,“C”等?)。

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

Answer 1:

file.txt的被保存在ISO 8859或Windows 1252(这两个是非常相似),以及由MySQL被解释为UTF-8。 这些都是不兼容的。

我如何知道?

  • 看点三:正确时解释为ISO-8859-1或Windows 1252的文件显示出来。
  • 看点一:character_set_database:UTF8

解决方案:要么将文件转换为UTF-8,或告诉MySQL把它解释为ISO-8859-1或Windows 1252。

背景:您提供的字符(A等)是在窗口1252的单字节值,这些字节是非法值在UTF-8,因此产生的S(Unicode替换字符)“?”。

从片断MySQL的文档 :

LOAD DATA INFILE语法

由character_set_database系统变量表示的字符集是用来解释文件中的信息。



Answer 2:

保存你的角色与标准的Windows记事本为UTF-8文件(记事本++也行)。

确切的文件内容:

'ã', 'ç', 'á'

MySQL版本:5.5.22
数据库字符集:UTF-8
数据库排序规则: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的):


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

二 - 如果文件是OK,添加你的Java代码将数据发送到MySQL的质疑。



文章来源: MYSQL special chars issue