Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các ký tự không phải tiếng Anh trong cơ sở dữ liệu bằng Java

Bạn thực sự nên thử tạo mọi thứ UTF-8 từ điểm này sang điểm khác.

Sử dụng đối chiếu nhận biết unicode thích hợp cho cơ sở dữ liệu và bảng, tôi luôn cung cấp cho mỗi bảng ngay cả khi mặc định db đã được cung cấp. Câu trả lời này có rất nhiều vấn đề về mysql + java và cả servlet nhưng chúng sẽ giải đáp hầu hết các vấn đề chúng ta cần biết khi phát triển các ứng dụng java nhận biết 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;

Sử dụng chuỗi kết nối jdbc để dịch 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"
/>

Buộc Tomcat sử dụng bộ mã kiểu nội dung cho cả chuỗi tham số GET và POST, vì vậy hãy áp dụng thuộc tính useBodyEncodingForURI cho các trình kết nối http và https (tệp 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"
/>

Ở đầu mỗi trang servlet, hãy đảm bảo rằng trình phân tích cú pháp Tomcat yêu cầu các tham số là utf-8. Bạn cần gọi setCharacterEncoding trước khi đọc các thông số nếu không đã quá muộn. Hầu hết các trình duyệt web không gửi thuộc tính bộ mã kiểu nội dung nên các công cụ servlet có thể đoán sai.

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

Hãy cẩn thận với trang .jsp, đừng chèn một whitechars trống ở đầu hoặc có thể quá muộn khi gọi setCharacterEncoding, hãy xem cách tôi đặt thẻ đánh dấu ở cuối mỗi hàng để tránh bất kỳ whitechars nào, cũng như cách các phần tử html bắt đầu từ dòng đầu tiên. Thẻ jsp contentType chuyển đến phản hồi http và pageEncoding nghĩa là cách tệp được lưu trữ trong đĩa. Nếu bạn chỉ có trình soạn thảo văn bản ISO-8859-15 và không mã hóa các chữ cái i18n trong trang jsp, bạn có thể chọn iso * pageEncoding thích hợp.

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

Tạo tài liệu xml trong trang jsp, bạn cần phải viết tiêu đề xml mà không có đường trắng hoặc dòng mới ở đầu. Xem cách thẻ nội dung scriptlet và tiêu đề xml nằm trên cùng một dòng. Đây là điều mà mã jsp được nhúng luôn phải cân nhắc, whitechar hàng đầu vô tội có thể làm hỏng các câu trả lời được định dạng tốt.

<%@ 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. Di chuyển dữ liệu vào Firebase từ MySQL

  2. Chèn giá trị vào cơ sở dữ liệu bằng câu lệnh đã soạn sẵn

  3. MySql thử bắt

  4. MYSQL Chuyển đổi dấu thời gian thành Tháng

  5. Cách tiếp cận nào nhanh hơn để nhận tất cả POI từ MySQL / MariaDB với PHP / Laravel