Java MYSQL特殊字符问题

Java MYSQL特殊字符问题,java,mysql,sql,jdbc,character-encoding,Java,Mysql,Sql,Jdbc,Character Encoding,我已经有这个问题很长时间了,我已经在互联网上搜索了很多次,尝试了很多,但是没有找到一个合适的解决方案 如果您能帮助我,我真的不知道该怎么办,我将非常感激。 (对不起,我的英语很差) 问题:如何解决输入存档和MYSql表之间的字符集不兼容问题 问题:从我的计算机上导入存档文件时,信息会显示在我的数据库中,但一些字符如('ã',ç','á',等)显示为? 传统信息 我正在使用MYSql,我的版本和变量状态为: MySQL VERSION : 5.5.10 HOST : localhost U

我已经有这个问题很长时间了,我已经在互联网上搜索了很多次,尝试了很多,但是没有找到一个合适的解决方案

如果您能帮助我,我真的不知道该怎么办,我将非常感激。
(对不起,我的英语很差)

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

问题:从我的计算机上导入存档文件时,信息会显示在我的数据库中,但一些字符如
('ã',ç','á',等)
显示为

传统信息

  • 我正在使用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
  • 关于正在导入的文件: 我已使用open office打开文件,其中包含3个字符集:

    UTF8-给了我奇怪的字符来代替“ç”、“ã”等…
    ISO-8859-1-正常。
    WIN-1252-正常。
    ASCII/US-OK

  • 已经测试:我在数据库中测试了一些字符集:拉丁1、utf-8、ascii,但它们都给出了相同的结果(?而不是“á”、“ç”等)

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


  • 使用标准Windows记事本将字符保存为UTF-8文件(记事本++也可以)

    确切的文件内容:

    'ã', 'ç', 'á' 使用命令导入数据

    LOAD DATA LOCAL INFILE 'C:/test/utf8.txt' 
    INTO TABLE abc
    FIELDS TERMINATED BY ';' 
    LINES TERMINATED BY ' ' 
    IGNORE 1 LINES
    ( qwe) 
    
    结果(以SQLyog显示):


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


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

    使用标准Windows记事本将字符保存为UTF-8文件(记事本++也可以)

    确切的文件内容:

    'ã', 'ç', 'á' 使用命令导入数据

    LOAD DATA LOCAL INFILE 'C:/test/utf8.txt' 
    INTO TABLE abc
    FIELDS TERMINATED BY ';' 
    LINES TERMINATED BY ' ' 
    IGNORE 1 LINES
    ( qwe) 
    
    结果(以SQLyog显示):


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


    第二,如果文件没有问题,请添加Java代码,以便向MySql发送数据。

    file.txt保存在ISO-8859-1或Windows-1252中(这两种格式非常相似),并被MySql解释为UTF-8。这些是不相容的

    我怎么知道

    • 参见第3点:当解释为ISO-8859-1或Windows-1252时,文件显示正确
    • 参见第1点:字符集数据库:utf8
    解决方案:将文件转换为UTF-8,或者告诉MySQL将其解释为ISO-8859-1或Windows-1252

    背景:您提供的字符(ã等)在windows-1252中是单字节值,而这些字节在UTF-8中是非法值,因此产生了“?”(unicode替换字符)

    摘自:

    加载数据填充语法

    character_set_数据库系统变量所指示的字符集用于解释文件中的信息


    file.txt保存在ISO-8859-1或Windows-1252中(这两种格式非常相似),MySQL将其解释为UTF-8。这些是不相容的

    我怎么知道

    • 参见第3点:当解释为ISO-8859-1或Windows-1252时,文件显示正确
    • 参见第1点:字符集数据库:utf8
    解决方案:将文件转换为UTF-8,或者告诉MySQL将其解释为ISO-8859-1或Windows-1252

    背景:您提供的字符(ã等)在windows-1252中是单字节值,而这些字节在UTF-8中是非法值,因此产生了“?”(unicode替换字符)

    摘自:

    加载数据填充语法

    character_set_数据库系统变量所指示的字符集用于解释文件中的信息


    你是如何查看你看到的“?”数据的?我已经编辑了你的帖子,但不清楚以结尾的
    行后面的字符是什么。我不认为这有什么区别,但如果我弄错了,请改变它!你是如何查看你看到的“?”数据的?我已经编辑了你的帖子,但不清楚以
    结尾的
    行后面的字符是什么。我不认为这有什么区别,但如果我弄错了,请改变它!感谢您的回答,我所做的是:1)将我的数据库设置为utf-8。2) 将“字符集1”添加到查询以导入我的文件。我不知道我是否正确,但似乎“2”迫使mysql将文件读取为LATIN1。不管怎样,几个月后它解决了我的问题。案件结案了!感谢您的回答,我所做的是:1)将我的数据库设置为utf-8。2) 将“字符集1”添加到查询以导入我的文件。我不知道我是否正确,但似乎“2”迫使mysql将文件读取为LATIN1。不管怎样,几个月后它解决了我的问题。案件结案了!