MySQL,Java和UTF8

Wil*_*ill 1 java mysql unicode utf-8

我有一个数据库MEDIUMBLOB与表中的字段ENGINE=InnoDB DEFAULT CHARSET=utf8上每个表.

我通过useUnicode=true&characterEncoding=UTF8&character_set_client=UTF8&character_set_database=UTF8&character_set_results=UTF8&character_set_server=UTF8&character_set_system=UTF8URL 连接到数据库.

(我尝试过useUnicode=true&characterEncoding=UTF8同样的结果.)

当我使用mysql命令行查看数据库中的值时,我可以看到非ASCII字符就好了.

但是当我从数据库读取字符串时,executeQuery() getString()我得到了胡言乱语.如何正确读取值?

我正在使用log4j来显示我写入数据库的字符串,以及我读回的字符串,以及我写的那些字符串.

Esa*_*ija 5

这是一个BLOB,而不是一个字符串.所以你想getBytes手动解码它.

 new String( bytes, "UTF-8"); //Subsitute "UTF-8" with whatever encoding the blob is in
Run Code Online (Sandbox Code Playgroud)

如果需要更透明的支持,请使用UTF-8定义一个mediumtext列.然后所有配置都将生效,并使用getString自动获得正确的字符串.

  • 是的,即将添加类似注释的东西 - 我没有注意到字段类型开始.(我希望当你试图使用错误的类型请求一个值时,驱动程序实际上会失败*,而不是给你一个非常可能错误的转换.) (2认同)