【问题标题】:Java Server Pages - collation when inserting into MySql?Java Server Pages - 插入 MySql 时的排序规则?
【发布时间】:2015-07-29 12:19:43
【问题描述】:

我正在使用 Java Server Pages,但在从我的应用程序插入数据时遇到了排序问题。我的插入代码如下所示:

<%@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 不起作用。

【问题讨论】:

    标签: java mysql jsp collation


    【解决方案1】:

    问号由此而来:

    • 客户端具有有效字符(良好),并且
    • SET NAMES 同意客户端的编码(很好),但是
    • 目标列的CHARACTER SET 不包含预期的字符(错误)。

    例子:

    • latin1 只处理西欧字符;试 将东欧字符或任何亚洲字符放入 它不适合。
    • latin2cp1250 可以处理捷克语,所以它们之间的转换大多是可以的, 但不在他们和latin1之间
    • utf8mb4utf8 的超集。 将 utf8 字符放入 utf8mb4 是可以的,但反过来 会产生一个“?”在某些情况下。

    转换为 '?' 的字符无法从表中恢复。

    如何修复未来的INSERTs

    • 在表格列上使用utf8mb4 可能适用于所有情况。
    • 否则,请为与客户数据合理匹配的表列选择一些CHARACTER SET

    只有部分字符为?(在š?ž?? 中)的原因是šž 存在于latin1 中,而其他字符则不存在。

    底线:更改表定义中的CHARACTER SET

    【讨论】:

    • 表定义没有问题。在 phpmyadmin 中,我可以将这些字符插入表中,并且可以使用 sql 查询将它们从表中读取到页面中。插入数据库只是忽略这些字符并插入“?”而不是他们。所以我认为问题出在jsp页面中并且不知道如何修复它。我将表定义中的排序规则和该表中的那些列更改为“utf8mb4”,但仍然是“??”出现。
    • šžlatin1 中可用,但其他三个字符不可用,因此是 ?。我相信获得š?ž?? 的唯一方法是拥有(1)utf8 字节(好),(2)连接到指定utf8(好)的mysql,但(3)CHARACTER SET latin1 在列/表上(坏)。
    • 请提供SHOW CREATE TABLE
    • 数据库排序的问题不是问题,因为我可以在 phpmyAdmin 中输入这些值,可以从表中获取那种数据,并且使用 useUnicode=true&characterEncoding=UTF-8 可以输入那种字符到数据库。我尝试使用“super utfmb4”,但结果仍然相同......将这些参数添加到连接链接问题后解决了。
    【解决方案2】:

    从旧路径添加到我的连接解决了问题

    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", "");
    

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2010-12-04
      • 2012-01-19
      • 1970-01-01
      相关资源
      最近更新 更多