当前位置: 首页 > 面试题库 >

在JSF2.0,Hibernate,MySQL中启用UTF-8字符集

孙永嘉
2023-03-14
问题内容

我们将对使用JSF2.0,Hibernate,MySQL设计的Web应用程序启用UTF-8字符编码。

以下是我们的应用程序上下文文件中定义的数据源

<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />   
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbname" />  
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" />
        <property name="useUnicode" value="yes" />
        <property name="characterEncoding" value="UTF-8" />
    </bean>

在运行应用程序时,我们遇到异常

Error creating bean with name 'SessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Cannot resolve reference to bean 'DataSource'  Error creating bean with name 'DataSource' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invalid property 'useUnicode' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]: Bean property 'useUnicode' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

我们也尝试使用以下方法,但出现错误

<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />   
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbname?useUnicode=yes&characterEncoding=UTF-8;" />  
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" />
    </bean>


Error: The reference to entity "characterEncoding" must end with the ';' delimiter

问题答案:

经过一些解决后,我能够处理该问题-以下是对我有用的代码,以启用与UTF8一起使用的JDBC

<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />   
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=UTF-8" />  
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" />
    </bean>

配合使用useUnicode=true&amp;characterEncoding=UTF-8达到&amp;目的

为了能够与Hibernate一起使用,还应在hibernate属性中指定以下内容

<property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>               
            </props>
        </property>

还要在过滤器中指定请求编码格式

public class ApplicationFilter implements Filter {    
        public void destroy() {
        }

    public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("utf-8");
        }

        public void init(FilterConfig fConfig) throws ServletException {
        }
    }

现在,即使您的应用程序和数据库不支持特殊字符,也请检查数据库字符集,尝试重新创建数据库并使用字符集UTF8代替latin1



 类似资料:
  • 我需要添加用户名从Facebook到数据库,这些名称有UTF-8字符,如 (ą,č,ę,ė,į,š,ų,ū).当我把它添加到数据库中,例如字母看起来像

  • 问题内容: 我的数据库已正确设置为UTF-8,并且正在处理包含日语字符的数据库。如果我从mysql命令行执行SELECT * …,我会正确看到日语字符。当将数据从数据库中拉出并显示在网页上时,我可以正确地看到它。 但是,在phpMyAdmin中查看表数据时,我只会看到垃圾文本。即。 ç§ã日本料ç†ãŒå¥½ããããã㥥œœ¬æ–™ç†ã… 如何获取phpMyAdmin以日语显示字

  • 问题内容: 我将承担将数据库从Latin1转换为UTF-8的繁琐而棘手的任务。 在这一点上,我只想检查存储在表中的数据类型,因为这将确定我应使用哪种方法转换数据。 具体来说,我想检查Latin1列中是否有UTF-8字符,什么是最好的方法?如果只影响几行,那么我可以手动修复它。 选项1.执行MySQL转储并使用Perl搜索UTF-8字符吗? 选项2。使用MySQL CHAR_LENGTH查找具有多字

  • 问题内容: 我正在使用mysql 5.5.10,它的character_sets是 我将utf8mb4从utf8更改为iOS5的表情符号。它们由4字节代码表示。 但是当我插入3个笑脸表情符号时,“ ???” 在mysql中。 它们是3F 3F 3F(十六进制)。 我可以很好地存储iOS4的表情符号,但不能存储iOS5的表情符号。 如何存储iOS5的表情符号? 请帮我。 问题答案: 4字节Unico

  • 问题内容: 我已经使用Java Mail API 来发送电子邮件。我正在使用联系人公式器来发送输入,该输入必须发送到特定的电子邮件。 尽管我是丹麦人,但电子邮件的发送没有问题,因此,在主题和电子邮件文本中,我需要三个丹麦字符,分别是“æ”,“ø”和“å”。 因此,我已经看到可以使用UTF-8字符编码来提供这些字符,但是在发送邮件时,我只会看到一些奇怪的字母-‘㦒,’㸒和’㥒-而不是丹麦