Non english characters in database using Java

时间:2015-11-12 10:40:18

标签: java mysql non-english

I have to save non-english (special character) in MySql using Java code , When i am trying to do so data is getting saved as ??????

String dataStr  = "κωνσταντίνα";
            System.out.println("Before " + dataStr);
             String dataStr1 = new String(dataStr.getBytes("ISO-8859-1"),"UTF-8"); 
             System.out.println("after "+dataStr1);
            String st = URLDecoder.decode("κωνσταντίνα", "UTF-8");
            cd.setTransactionDescription(dataStr1);

2 个答案:

答案 0 :(得分:1)

你真的应该尝试从点到点制作UTF-8。

对数据库和表使用适当的unicode感知排序规则,即使已经给出db default,我也总是给每个表。这个答案有很多mysql + java以及servlet问题,但它们应该回答我们在开发支持unicode的java应用程序时需要知道的大多数问题。

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
  maxActive="10" maxIdle="2" maxWait="10000"
  username="myuid" password="mypwd"
  driverClassName="com.mysql.jdbc.Driver"
  url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8"
  validationQuery="SELECT 1"
/>

使用jdbc连接字符串进行unicode转换。

<Connector port="8080"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           debug="0" connectionTimeout="20000"
           disableUploadTimeout="true"
           useBodyEncodingForURI="true"
/>

强制Tomcat对GET和POST参数字符串使用content-type charset,因此对http和https连接器应用useBodyEncodingForURI属性(tomcat / conf / server.xml文件)。

public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws ServletException { doPost(req, res); }

public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException {
   if (req.getCharacterEncoding() == null)
      req.setCharacterEncoding("UTF-8");

   String value = request.getParameter("fieldName");
   ...
}

在每个servlet页面的开头,确保Tomcat解析器请求参数为utf-8。您需要在读取参数之前调用setCharacterEncoding,否则为时已​​晚。大多数Web浏览器不发送内容类型的charset属性,因此servlet引擎可能会猜错。

contentType

小心.jsp页面不要插入一个空的前导whitechars或者调用setCharacterEncoding可能为时已晚,看看我如何将标记标记放在每一行的末尾以避免任何whitechars,以及html元素如何从第一行开始线。 Jsp标记pageEncoding转到http响应,<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*, java.io.* " %><% if (req.getCharacterEncoding() == null) request.setCharacterEncoding("UTF-8"); String param1 = request.getParameter("fieldName"); %><!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Page Title</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="keywords" content="some,fine,keywords" /> </head> <body> your html content goes here.... <%= param1 %> </body> </html> 表示文件如何存储在磁盘中。如果您只有ISO-8859-15文本编辑器,并且不在jsp页面中硬编码i18n字母,您可以选择正确的iso * pageEncoding。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ 
    page contentType="text/xml; charset=UTF-8" pageEncoding="ISO-8859-1"
    import="java.util.*, 
             java.io.*
    "
%><%
  // MyBean has getId() and getName() getters
  List<MyBean> items = new ArrayList<MyBean>();
  items.add( new MyBean(1, "first") );
  items.add( new MyBean(2, "second") );
  items.add( new MyBean(3, "third") );

  pageContext.setAttribute("items", items);
%><?xml version="1.0" encoding="UTF-8"?>
<mydoc>
<c:forEach var="item" items="${items}">
  <item>
    <id>${item.id}</id>
    <name>${item.name}</name>
  </item>
</c:forEach>
</mydoc>

在jsp页面中创建xml文档,您需要编写xml标题而不需要引导whitechars或换行符。了解scriptlet endtag和xml标头是如何在同一行中的。这就是嵌入式jsp代码必须始终考虑的内容,无辜的领先whitechar可能会破坏格式良好的回复。

public class RazorPreCompilation : RazorPreCompileModule
{
    public RazorPreCompilation(IServiceProvider provider) : base(provider)
    {
        this.GenerateSymbols = true;
    }
}

答案 1 :(得分:0)

Reasone because this happens is wrong encoding in JavaClass. Also i advice you to check your MySQL database encoding.

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci

Check this db-serverSide params

character_set_results 
character_set_connection
character_set_client