我想将阿拉伯语信息插入数据库,但总是得到这样的字符:ابÙÙ†Øμ。我在我的页面中使用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
答案 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
)。
导致问题的原因:
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
与此问题相关。