2015-06-28 3 views
0

Я пытаюсь писать русские символы в MySQL 5.5 с помощью JSP (JSTL). Хотя он работает на моем собственном локальном хосте, я не могу заставить его работать на сервере, который я арендовал.(JSP) Написание UTF8 для MySQL не будет работать

Он отправляет правильные параметры из формы на другую страницу, которая затем корректно выводит результат. Это также работает на сервере. Письмо/Чтение в БД и из него работает только на моем собственном локальном хосте.

Если я попытаюсь написать в БД на сервере, русские символы превратятся в вопросительные знаки. Тем не менее, я могу хранить русские символы, используя phpMyAdmin, которые затем корректно отображаются на моей веб-странице.

Вот мой запрос и то, что я пытался до сих пор: запрос:

<sql:update dataSource="${ds}" var="updatedTable"> 
     INSERT INTO Question (question) VALUES (?) 
     <sql:param value="${param.questionAsked}" /> 
    </sql:update> 

DBConn:

<sql:setDataSource var="ds" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/myDBname?useUnicode=true&characterEncoding=utf-8" user="secret" password="secret" /> 

страницы Кодирование в каждом JSP файл:

<%@page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

Добавьте это в tomcat server.xml:

<Connector port="8080" maxHttpHeaderSize="8192" 
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="false" redirectPort="8443" acceptCount="100" 
connectionTimeout="20000" disableUploadTimeout="true" 
URIEncoding="UTF-8" 
/> 

раскомментировали CharacterEncodingFilter в web.xml:

<filter> 
    <filter-name>setCharacterEncodingFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <async-supported>true</async-supported> 
</filter> 
    <filter-mapping> 
    <filter-name>setCharacterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

И изменяющий/создание новых децибел и таблиц БД для тестирования с utf8:

CREATE TABLE `Question` (
    `questionID` int(6) unsigned NOT NULL AUTO_INCREMENT, 
    `question` varchar(255) DEFAULT NULL, 
    `categoryID` int(6) unsigned DEFAULT NULL, 
    PRIMARY KEY (`questionID`), 
    KEY `categoryID` (`categoryID`), 
    CONSTRAINT `question_ibfk_1` FOREIGN KEY (`categoryID`) REFERENCES `Category` (`categoryID`) 
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; 

Я думаю, что моя проблема где-то в MySQL разъем. Я не мог понять, как изменить его, так как у меня нет доступа к конфигурационным файлам mysql. Я запросил SSH-доступ, если это поможет мне. Я довольно новичок в таких проблемах, так как я слишком долго не имел дело с базами данных и особенно с серверами.

PHPMYADMIN показывает:

character set client - latin1, (session value - utf8) 
character set connection - latin1, (session value - utf8) 
character set database - latin1 
character set results - latin1, (session value - utf8) 
character set server - latin1 
character set system - utf8 
collation connection - latin1_swedish_ci (session value - utf8_unicode_ci) 
collation database - latin1_swedish_ci 
collation server - latin1_swedish_ci 

Я надеюсь, что вы можете предложить, что делать ...

+0

Спасибо за вашу помощь Балус, я мог бы понять это с помощью сервлета, чтобы убедиться, что utf8 идет и из. –

ответ

0

я понял это сам. Недостаточно расколоть фильтр CharacterEncoding. Мне также пришлось внедрить фильтр в мой webapp. Heres код:

package filters; 

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class CharsetFilter implements Filter { 
private String encoding; 

public void init(FilterConfig config) throws ServletException { 
    encoding = config.getInitParameter("requestEncoding"); 

    if (encoding == null) 
     encoding = "UTF-8"; 
} 

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain next) throws IOException, ServletException { 
    // Respect the client-specified character encoding 
    // (see HTTP specification section 3.4.1) 
    if (null == request.getCharacterEncoding()) 
     request.setCharacterEncoding(encoding); 

    /** 
    * Set the default response content type and encoding 
    */ 
    response.setContentType("text/html; charset=UTF-8"); 
    response.setCharacterEncoding("UTF-8"); 

    next.doFilter(request, response); 
} 

public void destroy() { 
} 

} 

И не забудьте его в web.xml:

<filter> 
    <filter-name>CharsetFilter</filter-name> 
    <filter-class>filters.CharsetFilter</filter-class> 
    <init-param> 
    <param-name>requestEncoding</param-name> 
    <param-value>UTF-8</param-value> 
    </init-param> 
    </filter> 
    <filter-mapping> 
    <filter-name>CharsetFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
Смежные вопросы