java – 字符编码JDBC MySQL

我有一个多语言的
Java应用程序,它可以在
MySql数据库中获取和存储数据.

我把表格整理保留为utf-8-general-ci

对于JDBC连接,我使用useUnicode = true& characterEncoding = UTF-8参数.

像®这样的字符可以正常显示,但中文字符会混乱.

现在,

在添加JVM参数-Dfile.encoding = UTF8

显示中国的字符,但不喜欢®字符.

我该怎么做才能显示来自不同语言的所有字符.

编辑:

输入数据来自UDP数据包,由ByteBuffer上的get方法处理.

和像这样实现的getString方法.

public String getString() {
    byte[] remainingBytes = new byte[this.byteBuffer.remaining()];
    this.byteBuffer.slice().get(remainingBytes);
    String dataString = new String(remainingBytes);
    int stringEnd = dataString.indexOf(0);

    if(stringEnd == -1) {
        return null;
    } else {
        dataString = dataString.substring(0, stringEnd);
        this.byteBuffer.position(this.byteBuffer.position() + dataString.getBytes().length + 1);

        return dataString;
    }
}

最佳答案 当你在MYSQL中直接尝试角色时,你说的是,只有当java把它放在那里时它才是错误的.

尝试让你的代码查找这些字符并将它们转储到文本文件中或者转到std进行简短的测试以比较文本std输出与发送到db的文本?

还值得存储db事务以查看发送的内容:

至于mysql配置,确保你有表和mysql本身在utf-8模式下运行:

[client]
default-character-set=utf8

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci

确保上面已经放入/etc/mysql/my.cnf
对于您在下面运行的每个数据库名称,要使其转储表并为每个表添加一行转换为utf8

select CONCAT("Alter Table `",  i.TABLE_NAME, "` CONVERT TO CHARACTER SET utf8;") as MySQLCMD from information_schema.TABLES i where i.TABLE_SCHEMA =
"userbase" INTO OUTFILE '/tmp/userbase.csv' ;

其他值得尝试的东西 – 特别是如果它在这台服务器上写入utf-8:

> Linux系统环境:

Unix Locale
现场

LANG = en_GB.UTF -8-
LC_CTYPE = “en_GB.UTF-8”
LC_NUMERIC = “en_GB.UTF-8”
LC_TIME = “en_GB.UTF-8”
LC_COLLATE = “en_GB.UTF-8”
LC_MONETARY = “en_GB.UTF-8”
LC_MESSAGES = “en_GB.UTF-8”
LC_PAPER = “en_GB.UTF-8”
LC_NAME = “en_GB.UTF-8”
LC_ADDRESS = “en_GB.UTF-8”
LC_TELEPHONE = “en_GB.UTF-8”
LC_MEASUREMENT = “en_GB.UTF-8”
LC_IDENTIFICATION = “en_GB.UTF-8”
LC_ALL =

解决这个问题

 sudo dpkg-reconfigure locales    select en_GB.UTF-8
 update-locale LANG=en_GB.UTF-8

重新启动服务盒,以获取您需要的用户utf-8
完全注销并重新启动并在重新启动之前检查区域设置以确保
它的工作.

现在这意味着您可以在本地ssh上输入日语(如果是putty
在设置utf-8需要选择)

> Tomcat:
将URIEncoding =“UTF-8”添加到

我也加入了

 <Connector port="8009"......
           protocol="AJP/1.3"  URIEncoding="UTF-8" />

3.2
在本地站点的web.xml中(在WEB-INF中)web.xml(不确定是否
这是必不可少的)

<web-app>
    <filter>
        <filter-name>charsetFilter</filter-name>
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

然后寻找映射并添加:

 <!-- Define filter mappings for the defined filters -->
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

我遇到了一些特殊的字符损坏问题,值得在一个优秀的utf-8编辑器中打开保存和查看udp字符串(带有选项以启用utf-8的记事本)或kate或kde上的某些内容.

还可以测试不同的utf-8字符,这些字符可以正常工作,也可能通过std输出或文件无效

http://www.fileformat.info/info/unicode/char/search.htm

并确保字符相同
http://www.fileformat.info/info/unicode/char/00ae/index.htm

点赞