如何通过Java将阿拉伯数据插入mysql数据库?

时间:2013-06-02 18:53:54

标签: java mysql character-encoding arabic

我想将阿拉伯语信息插入数据库,但总是得到这样的字符:ابÙÙ†Øμ。我在我的页面中使用UTF-8编码,并将数据库设置为utf8_general_ci。

我读了许多类似于这个问题的问题,但我没有为我的案例找到解决方案。

这是solution,但是使用php,我不知道如何在java中做同样的事情。

插入代码 (通过JdbcTemplate)

final String move_insert = "insert into r_movement (PPR,cd_fonc,nom_etabl,ville,delegation,date_debut,date_fin,nbjour,nbmois,nbannees,cina,cinn) "
               + "values (?,?,?,?,?,?,?,?,?,?,?,?)";

       getJdbcTemplate()
       .update(move_insert, new Object[] {move.getPpr(),move.getFonction(),move.getNom_etabl(),move.getVille(),move.getDelegation(),move.getDate_debut(),move.getDate_fin(),c.getNbjours(),c.getNbmois(),c.getNbyears(),move.getCina(),move.getCinn()});

这是我的表:

CREATE TABLE `r_movement` (
 `id_move` int(11) NOT NULL AUTO_INCREMENT,
 `PPR` int(11) NOT NULL,
 `cd_fonc` varchar(255) CHARACTER SET utf8 NOT NULL,
 `nom_etabl` varchar(255) CHARACTER SET utf8 NOT NULL,
 `ville` varchar(255) CHARACTER SET utf8 NOT NULL,
 `delegation` varchar(255) CHARACTER SET utf8 NOT NULL,
 `date_debut` date NOT NULL,
 `date_fin` date NOT NULL,
 `nbjour` int(255) NOT NULL,
 `nbmois` int(255) NOT NULL,
 `nbannees` int(255) NOT NULL,
 `CINA` varchar(255) CHARACTER SET utf8 NOT NULL,
 `CINN` varchar(255) CHARACTER SET utf8 NOT NULL,
 PRIMARY KEY (`id_move`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8

3 个答案:

答案 0 :(得分:3)

我解决了Finnaly错过了web.xml文件中的配置问题!

<filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding-filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

我现在可以安全地将阿拉伯数据插入数据库! 感谢

答案 1 :(得分:2)

尝试按照docs中的说明在连接字符串中设置字符编码。 e.g。

jdbc:mysql://localhost/some_db?useUnicode=yes&characterEncoding=UTF-8

您也可以将其设置为服务器配置。看看文档。

答案 2 :(得分:0)

本答案(姗姗来迟)讨论了如何恢复mojibaked文本。

ابو نص代表ابو نص。十六进制:D8A7D8A8D98820D986D8B5。这是5个阿拉伯字符(Dxxx),加上一个空格(20)。

导致问题的原因:

  • 客户端中的字节在utf8中正确编码。
  • 您可能默认与latin1相关联。 (应该是utf8。)
  • 表格中的列已声明为CHARACTER SET latin1。 (或者它可能是从表/数据库继承的。)(应该是utf8。)

修复数据是“两步更改”。

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;

其中长度足够大而另一个“......”还有其他任何内容(NOT NULL等)已经在列上。

顺便说一下,utf8_general_ci是一个“整理”;只有“字符集”utf8与此问题相关。