我编写了一个JSP代码,需要运行一些包含非英语字符(波斯语)的mysql INSERT查询。我运行两种类型的查询,第一种是静态应用程序安装查询,第二种是用户输入。执行两个查询后,非英语字符被导入为“?”因为我在应用程序本身和phpMyAdmin中检查它们!
我尝试在连接后执行这些查询,但我没有帮助:
SET NAMES utf8
SET CHARACTER SET utf8
SET SESSION collation_connection = 'utf8_general_ci'
有什么问题?我该如何解决?
答案 0 :(得分:2)
执行两个查询后,没有英文字符导入为“?”因为我在应用程序本身和phpMyAdmin中检查它们!
因此,数据库(或更具体地说,JDBC驱动程序)在INSERT
期间没有使用UTF-8。
通常,数据库的JDBC驱动程序应足够智能,以使用数据库和/或表指定的编码来存储数据。但在某些情况下,您还必须在连接字符串中指定字符编码。在MySQL JDBC驱动程序中也是如此,因为它不使用数据库指定的编码,而是使用客户端指定的编码。如何配置它应该已在JDBC驱动程序文档中得到解答。在例如MySQL中,您可以阅读它here:
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
那说并且与问题无关,你实际上应该在JSP文件中尝试avoid原始Java代码。它只会在未来导致另一种问题。