sql >> データベース >  >> RDS >> Mysql

Javaを使用したデータベース内の英語以外の文字

    本当にすべてをUTF-8で作成してみてください。

    データベースとテーブルに適切なUnicode対応の照合を使用します。dbのデフォルトがすでに指定されている場合でも、常にテーブルごとに指定します。この回答には、mysql + javaとサーブレットの問題がたくさんありますが、Unicode対応の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接続文字列を使用します。

    <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パラメータ文字列の両方にコンテンツタイプの文字セットを使用するように強制するため、httpおよびhttpsコネクタ(tomcat / conf / server.xmlファイル)にuseBodyEncodingForURI属性を適用します。

    <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を呼び出す必要があります。そうしないと、手遅れになります。ほとんどのWebブラウザはcontent-typecharset属性を送信しないため、サーブレットエンジンはそれを誤って推測する可能性があります。

    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テキストエディタのみを使用していて、jspページにi18n文字をハードコーディングしない場合は、適切な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>
    

    jspページでxmlドキュメントを作成するには、先頭にホワイト文字や改行を付けずに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. WHEREIN句で使用する値の配列をOracleプロシージャに送信する

    2. SQL ServerのLIMITとOFFSETに相当しますか?

    3. MYSQL:文字列リテラルでGROUPBYを使用する

    4. SQLクエリのpreparedstatementで変数を使用するにはどうすればよいですか?