Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Karakter non bahasa Inggris dalam database menggunakan Java

Anda benar-benar harus mencoba membuat semuanya UTF-8 dari titik ke titik.

Gunakan susunan sadar unicode yang sesuai untuk database dan tabel, saya selalu memberikan per tabel bahkan jika db default sudah diberikan. Jawaban ini memiliki banyak masalah mysql+java dan juga servlet tetapi mereka harus menjawab sebagian besar masalah yang perlu kita ketahui saat mengembangkan aplikasi java yang sadar 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;

Gunakan string koneksi jdbc untuk mendapatkan terjemahan 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"
/>

Paksa Tomcat untuk menggunakan rangkaian karakter tipe konten untuk string parameter GET dan POST, jadi terapkan atribut useBodyEncodingForURI untuk konektor http dan https (file 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"
/>

Di awal setiap halaman servlet, pastikan parser Tomcat meminta parameter sebagai utf-8. Anda perlu memanggil setCharacterEncoding sebelum membaca parameter atau sudah terlambat. Sebagian besar browser web tidak mengirimkan atribut charset tipe konten sehingga mesin servlet mungkin salah menebaknya.

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

Hati-hati dengan halaman .jsp jangan menyisipkan karakter putih awal yang kosong atau mungkin terlambat memanggil setCharacterEncoding, lihat bagaimana saya meletakkan penanda tag di akhir setiap baris untuk menghindari karakter putih, juga bagaimana elemen html dimulai dari baris pertama. Tag Jsp contentType buka respons http dan pageEncoding berarti bagaimana file disimpan dalam disk. Jika Anda hanya memiliki editor teks ISO-8859-15 dan tidak melakukan hardcode huruf i18n di halaman jsp, Anda dapat memilih iso* pageEncoding yang tepat.

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

Membuat dokumen xml di halaman jsp Anda perlu menulis header xml tanpa memimpin whitechars atau baris baru. Lihat bagaimana scriptlet endtag dan header xml berada di baris yang sama. Inilah yang harus selalu dipertimbangkan oleh kode jsp yang disematkan, karakter putih terkemuka yang tidak bersalah dapat merusak balasan yang diformat dengan baik.

<%@ 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. PHP Periksa Baris Terakhir MySQL

  2. MySQL:Kelompokkan Menurut &Hitung Banyak Bidang

  3. Bagaimana Mengonversi UTC ke Waktu Lokal di MySQL

  4. Mengapa kueri kami macet di status Menulis ke jaring di MySql?

  5. MySQL FULLTEXT tidak akan berfungsi dengan lebih dari satu bidang