Mysql
 sql >> база данни >  >> RDS >> Mysql

Неанглийски знаци в базата данни с помощта на Java

Наистина трябва да опитате да направите всичко UTF-8 от точка до точка.

Използвайте подходящо съпоставяне с информация за Unicode за база данни и таблица, аз винаги давам за таблица, дори ако вече е дадено db default. Този отговор има много проблеми с mysql+java, а също и със сървлети, но те трябва да отговорят на повечето проблеми, които трябва да знаем, когато разработваме java приложения с уникод.

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_swedish_ci;

CREATE TABLE tMyTable (
  id int(11) NOT NULL auto_increment,
  code VARCHAR(20) NOT NULL,
  name VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_swedish_ci;

Използвайте низ за връзка jdbc, за да имате превод на Unicode.

<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"
/>

Принудете Tomcat да използва набор от знаци от тип съдържание както за GET, така и за POST низове от параметри, така че приложете атрибут useBodyEncodingForURI за http и https конектори (tomcat/conf/server.xml файл).

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

В началото на всяка страница със сървлет се уверете, че парсерите на Tomcat изискват параметри като utf-8. Трябва да извикате setCharacterEncoding, преди да прочетете параметрите или е твърде късно. Повечето уеб браузъри не изпращат атрибут на набор от символи тип съдържание, така че сървлетните машини може да го познаят погрешно.

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");
   ...
}

Внимавайте със страницата .jsp, не вмъквайте празни водещи бели знаци или може да е твърде късно да извикате setCharacterEncoding, вижте как поставям маркери за етикети в края на всеки ред, за да избегна бели знаци, както и как html елементите започват от първия ред. Jsp маркер contentType отива към http отговор и pageEncoding означава как файлът се съхранява на диск. Ако имате само текстов редактор ISO-8859-15 и не кодирате твърдо i18n букви в jsp страница, можете да изберете правилно iso* pageEncoding.

<%@ 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>

Създавайки xml документ в jsp страница, трябва да напишете xml заглавка без водещи бели знаци или нови редове. Вижте как крайният таг на скриптлета и заглавката на xml са в един ред. Това е, което вграденият jsp код винаги трябва да взема предвид, невинен водещ whitechar може да съсипе добре форматираните отговори.

<%@ 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>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Интелигентна MySQL GROUP BY за потоци от дейности

  2. Как да използвате DELETE ON CASCADE на релация много към едно

  3. MySQL:Голям VARCHAR срещу TEXT?

  4. Как да изберете няколко реда от mysql с една заявка и да ги използвате в php

  5. C# с параметри на MySQL INSERT