首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 4.1.4 JDBC 中文亂碼解決:JNDI 數據源配置實戰

     編輯:MySQL 資料庫相關知識

問題背景

Orion Server + MySQL 4.1.4 + JDBC,Servlet 通過 JNDI 查找 DataSource,中文 INSERT 亂碼。

環境配置

  1. JDBC 驅動放入 [ORION]/lib
  2. data-sources.xml 配置:
<data-source
    class="com.evermind.sql.DriverManagerDataSource"
    name="MySQLDbpage"
    location="jdbc/HypersonicCoreDS"
    xa-location="jdbc/xa/HypersonicXADS"
    ejb-location="jdbc/MySQLDbPage"
    connection-driver="org.gjt.mm.mysql.Driver"
    username="root"
    password=""
    url="jdbc:mysql://localhost/test"
    inactivity-timeout="30"
/>

關鍵點

  • ejb-location:JNDI 查找名 jdbc/MySQLDbPage
  • connection-driver:MySQL Connector/J 類名
  • url:必須加字符集參數 ?useUnicode=true&characterEncoding=gb2312

修正後的 URL

url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gb2312"

JSP 中使用

<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.sql.*, javax.sql.DataSource, javax.naming.InitialContext" %>
<%
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("jdbc/MySQLDbPage");
Connection conn = ds.getConnection();
// ... 後續操作
%>

根因分析

MySQL 4.1+ 服務端默認字符集為 latin1,JDBC 驅動若不顯式指定 characterEncoding,會按 ISO-8859-1 編碼發送數據,導致中文存入錯誤字節。URL 參數是最直接有效的解決途徑。

現代版本最佳實踐 (MySQL 5.7+/8.0 + Connector/J 5.1+/8.0)

url="jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false"
  • 統一使用 UTF-8 (MySQL 8.0 默認 utf8mb4)
  • 指定時區避免時間偏移
  • 生產環境啟用 SSL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved