sql >> Databáze >  >> RDS >> Mysql

Neanglické znaky v databázi pomocí Javy

Opravdu byste se měli pokusit udělat všechno UTF-8 z bodu do bodu.

Pro databázi a tabulku použijte vhodné porovnávání s vědomím unicode, vždy dávám za tabulku, i když již byla zadána výchozí hodnota db. Tato odpověď má spoustu problémů s mysql+java a také se servlety, ale měly by odpovědět na většinu problémů, které potřebujeme vědět při vývoji Java aplikací s podporou unicode.

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;

Pro překlad Unicode použijte připojovací řetězec jdbc.

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

Vynuťte Tomcat, aby používal znakovou sadu typu obsahu pro řetězce parametrů GET i POST, takže použijte atribut useBodyEncodingForURI pro konektory http a https (soubor 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"
/>

Na začátku každé stránky servletu se ujistěte, že Tomcat analyzuje parametry požadavku jako utf-8. Před čtením parametrů musíte zavolat setCharacterEncoding, jinak je příliš pozdě. Většina webových prohlížečů neposílá atribut charset typu content, takže servletové enginy to mohou odhadnout špatně.

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

Buďte opatrní se stránkou .jsp nevkládejte prázdné úvodní bílé znaky, jinak může být volání setCharacterEncoding příliš pozdě, podívejte se, jak umístím značky značek na konec každého řádku, abych se vyhnul jakýmkoli bílým znakům, také jak html prvky začínají od prvního řádku. Značka JSP contentType přejde na odpověď http a pageEncoding znamená, jak je soubor uložen na disku. Pokud máte pouze textový editor ISO-8859-15 a nekódujete napevno písmena i18n na stránce jsp, můžete zvolit správné kódování stránky iso*.

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

Při vytváření xml dokumentu na stránce jsp musíte napsat xml záhlaví bez úvodních bílých znaků nebo nových řádků. Podívejte se, jak je koncová značka skriptletu a záhlaví xml na stejném řádku. To je to, co musí vložený kód jsp vždy brát v úvahu, nevinný vedoucí whitechar může zničit dobře naformátované odpovědi.

<%@ 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. Zkontrolujte, zda tabulka obsahuje cizí klíč na serveru SQL pomocí OBJECTPROPERTY()

  2. Jedinečné IP adresy v hlasovacím systému

  3. Jaké jsou rozdíly mezi seskupeným a neshlukovaným indexem?

  4. Nelze otevřít test databáze požadovaný přihlášením. Přihlášení se nezdařilo. Přihlášení pro uživatele 'xyz\ASPNET' se nezdařilo