假设我从 java.sql.ResultSet.getString(1) 获取一个字符串。我从这个字符串中调用了 String.getBytes()。
现在无论从哪里查询结果集的数据库使用的字符集,我得到相同的结果吗?即如果我跨不同的数据库(使用不同的字符集)执行该过程,调用getBytes 后是否得到相同的结果?
假设我从 java.sql.ResultSet.getString(1) 获取一个字符串。我从这个字符串中调用了 String.getBytes()。
现在无论从哪里查询结果集的数据库使用的字符集,我得到相同的结果吗?即如果我跨不同的数据库(使用不同的字符集)执行该过程,调用getBytes 后是否得到相同的结果?
是的。
存储在数据库中的字节被转换为字符串中的 Unicode 字符。
您将 String char
s 转换为您指定(或系统默认)作为字符编码的任何字节。
Database bytes -> String chars -> Your bytes
DB encoding Your encoding
如果数据库中有问题或 JDBC 未正确解码数据库中的字节,则字符串将是错误的。例如,如果字节是捷克语的一些 UTF-8 编码并且它使用一些西方编码或 Windows 标准编码对它们进行解码,则字符串将是错误的。如果您打印字符串,您会看到重音字符看起来像分数或有趣的字符组合。
但是进入字符串的任何内容都将根据您指定的字符集进行编码。
要看。数据库的编码将发挥作用,如果您的数据库编码是 latin1 但您保存的内容超出了它的字符集(utf-8 字符),它将把乱码保存为值。获取该错误值的字节与原始值不同。