MYSQL特殊字符问题
我一直有这个问题很长一段时间,我已经搜索了很多次的互联网解决方案,尝试了很多,但没有找到一个适当的解决方案。MYSQL特殊字符问题
我真的鸵鸟政策知道该怎么做,如果你能帮我我倒是很感激。
(对不起,我的英文很差)。
问题:如何解决输入存档和MYSQL表之间的字符集不兼容问题?
问题:当导入从我的计算机上的信息会出现在我的数据库存档,但有些字符为('ã', 'ç', 'á', etc..)
显示为?
。
aditional的信息
-
我使用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
-
正在使用的查询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个字符集:
UTF8 - 给我奇怪的字符在地方的“C”,“A”,等...
ISO-8859-1 - OK 。
WIN-1252 - 好的。
ASCII/US - 确定。 已经测试过:我测试过一些在我的数据库中的字符集:latin1,utf-8,ascii,但它们都给了我相同的结果(?而不是'á','ç'等)。
超:我使用Java和Java JDBC来生成和发送查询。
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系统变量指示的字符集是用来解释文件中的信息。
感谢您的回答,我做了什么来解决不兼容问题: 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的显示):
所以,首先 - 你应该检查与可靠的编辑器(记事本,记事本++)原始文件。如果文件损坏,那么你应该采取另一个文件。其次 - 如果文件正常,则向您添加用于向MySql发送数据的Java代码。
您如何查看您看到'?'的数据? – 2012-04-16 18:47:26
我已经编辑了你的帖子,但是不清楚“LINES TERMINATED BY”之后的字符是什么意思。我不认为这有什么区别,但如果我错了,请改变它! – Ben 2012-04-16 18:54:57