Java 字符编码JDBCMySQL
我有一个多语言java应用程序,它在MySql数据库中获取和存储数据 我将表格排序保留为utf-8-general-ci 对于JDBC连接,我使用useUnicode=true&characterEncoding=UTF-8参数 像®这样的字符可以正确显示,但中文字符却乱七八糟 现在 在添加JVM参数时-Dfile.encoding=UTF8 显示中文字符,但不显示类似®的字符 我应该如何显示来自不同语言的输入中的所有字符 编辑: 输入数据来自UDP数据包,该数据包由ByteBuffer上的get方法处理 还有一个像这样实现的getString方法Java 字符编码JDBCMySQL,java,mysql,jdbc,character-encoding,Java,Mysql,Jdbc,Character Encoding,我有一个多语言java应用程序,它在MySql数据库中获取和存储数据 我将表格排序保留为utf-8-general-ci 对于JDBC连接,我使用useUnicode=true&characterEncoding=UTF-8参数 像®这样的字符可以正确显示,但中文字符却乱七八糟 现在 在添加JVM参数时-Dfile.encoding=UTF8 显示中文字符,但不显示类似®的字符 我应该如何显示来自不同语言的输入中的所有字符 编辑: 输入数据来自UDP数据包,该数据包由ByteBuffer上的ge
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将其放在MYSQL中时,它才是不正确的 尝试让您的代码查找这些字符,并将它们转储到文本文件或输出到std进行一个简短测试,以比较文本std输出与发送到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
对于下面运行的每个DB名称,将其转储到表中,并为每个表添加一个alter行以转换为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编写:
sudo dpkg-reconfigure locales select en_GB.UTF-8
update-locale LANG=en_GB.UTF-8
“重新启动”框,以便服务以您需要的用户身份接收utf-8
完全注销并重新登录,并在重新启动前检查区域设置,以确保
它起作用了
这意味着您可以在本地ssh上输入日语(如果putty
在设置中(需要选择utf-8)
<Connector port="8009"......
protocol="AJP/1.3" URIEncoding="UTF-8" />
3.2
在web.xml中,对于本地站点(在web-INF中)web.xml(不确定是否
这是必要的)
字符集过滤器
filters.SetCharacterEncodingFilter
编码
UTF-8
然后查找映射并添加:
<!-- Define filter mappings for the defined filters -->
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
字符集过滤器
/*
我遇到了一些特定的字符损坏问题,值得在一个好的utf-8编辑器(notepad++带有启用utf-8的选项)或kde上的kate或其他东西中打开保存和查看udp字符串
还可以通过std out或file on测试不同的utf-8字符,即可以工作的字符和可能不工作的字符
并确保字符相同
您想在哪里显示东西?现在还不清楚这个问题是否真的与数据库有关。我将它显示在一个PHP网页上,从mysql数据库中获取数据。好吧,这是很容易出错的另一个方面。你做了什么来说服自己问题出在Java代码而不是PHP中?因为在JDBC中只使用useUnicode=true&characterEncoding=UTF-8时,它会像®一样显示字符,但在JVM参数中添加-Dfile.encoding=UTF8时,它会停止正确显示。当我复制粘贴中文/数据库中的任何字符时,它会正确显示。所以问题出在JAVA->DB路径中
<!-- Define filter mappings for the defined filters -->
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>