我的表中有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=UTF8
连接到数据库。
(我只用useUnicode=true&characterEncoding=UTF8
尝试了相同的结果。)
当我使用命令行中的mysql
查看数据库中的值时,我可以看到非ASCII字符就好了。
但是当我使用executeQuery()
getString()
从数据库中读取字符串时,我得到了胡言乱语。如何正确读取值?
我正在使用log4j来显示我正在写入数据库的字符串,以及我读回的字符串,以及我写的那些字符串。
答案 0 :(得分:5)
这是一个BLOB,而不是一个字符串。所以你想要getBytes
并手动解码它。
new String( bytes, "UTF-8"); //Subsitute "UTF-8" with whatever encoding the blob is in
如果您需要更透明的支持,请使用UTF-8定义一个mediumtext列。然后,所有配置都将生效,并使用getString自动获得正确的字符串。