Orion Server + MySQL 4.1.4 + JDBC,Servlet 通過 JNDI 查找 DataSource,中文 INSERT 亂碼。
[ORION]/libdata-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/MySQLDbPageconnection-driver:MySQL Connector/J 類名url:必須加字符集參數 ?useUnicode=true&characterEncoding=gb2312url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gb2312"
<%@ 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 參數是最直接有效的解決途徑。
url="jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false"
utf8mb4)