Java 服务器页面 - 插入 MySql 时的排序规则?
Java Server Pages - collation when inserting into MySql?
我正在使用 Java 服务器页面,并且在从我的应用程序插入数据时遇到排序规则问题。我的插入代码如下所示:
<%@page import="java.sql.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<% Class.forName( "com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/myapp", "root", "");
Statement st=con.createStatement();
ResultSet rs;
st.executeUpdate("insert into table values (default,1,2,šđžćč)"); %>
在我的数据库中,结果看起来像这样 š?ž?? (所以他可以看到理解 2 个字母,但不是全部)。如何修复它以便所有字母都在我的数据库中?
编辑:
我可以通过 phpmyadmin 插入带有这些字符的数据,但我不能从 .jsp 文件到数据库。就像我的 jsp 文件中的 charset = utf-8 不起作用。
问号由此而来:
- 客户有一个有效的字符(好),并且
SET NAMES
同意客户端的编码(好),但是
- 目标列的
CHARACTER SET
不包含预期的字符(错误)。
示例:
latin1
只处理西欧字符;试
将东欧字符或任何亚洲字符放入
它不适合。
latin2
和 cp1250
可以处理捷克语,所以它们之间的转换大部分都可以,
但不在他们中的任何一个和 latin1
之间
utf8mb4
是 utf8
的超集。
把一个utf8字符转成utf8mb4是可以的,反之
将导致“?”在某些情况下。
转换为“?”的字符无法从 table.
恢复
如何解决未来INSERTs
?
- 在 table 列上使用
utf8mb4
可能适用于所有情况。
- 否则,为与客户数据合理匹配的 table 列选择一些
CHARACTER SET
。
只有一些字符是 ?
(在 š?ž??
中)的原因是因为 šž
存在于 latin1 而其他字符不存在。
底线:更改 table 定义中的 CHARACTER SET
。
通过从旧路径添加到我的连接解决了问题
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/myapp", "root", "");
至
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/myapp?useUnicode=true&characterEncoding=UTF-8", "root", "");
我正在使用 Java 服务器页面,并且在从我的应用程序插入数据时遇到排序规则问题。我的插入代码如下所示:
<%@page import="java.sql.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<% Class.forName( "com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/myapp", "root", "");
Statement st=con.createStatement();
ResultSet rs;
st.executeUpdate("insert into table values (default,1,2,šđžćč)"); %>
在我的数据库中,结果看起来像这样 š?ž?? (所以他可以看到理解 2 个字母,但不是全部)。如何修复它以便所有字母都在我的数据库中?
编辑: 我可以通过 phpmyadmin 插入带有这些字符的数据,但我不能从 .jsp 文件到数据库。就像我的 jsp 文件中的 charset = utf-8 不起作用。
问号由此而来:
- 客户有一个有效的字符(好),并且
SET NAMES
同意客户端的编码(好),但是- 目标列的
CHARACTER SET
不包含预期的字符(错误)。
示例:
latin1
只处理西欧字符;试 将东欧字符或任何亚洲字符放入 它不适合。latin2
和cp1250
可以处理捷克语,所以它们之间的转换大部分都可以, 但不在他们中的任何一个和latin1
之间
utf8mb4
是utf8
的超集。 把一个utf8字符转成utf8mb4是可以的,反之 将导致“?”在某些情况下。
转换为“?”的字符无法从 table.
恢复如何解决未来INSERTs
?
- 在 table 列上使用
utf8mb4
可能适用于所有情况。 - 否则,为与客户数据合理匹配的 table 列选择一些
CHARACTER SET
。
只有一些字符是 ?
(在 š?ž??
中)的原因是因为 šž
存在于 latin1 而其他字符不存在。
底线:更改 table 定义中的 CHARACTER SET
。
通过从旧路径添加到我的连接解决了问题
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/myapp", "root", "");
至
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/myapp?useUnicode=true&characterEncoding=UTF-8", "root", "");