程序处理
这是历史遗留系统,旧系统由c开发,在插入数据时,MYSQL各层(服务器、数据库、表、列)的代码不统一。 这种情况基本上是由于MYSQL的缺省安装,实际的数据代码是LATIN1,但使用Java开发的新系统需要与该传统系统共享数据库,采用了UTF8代码。 遭遇了
我弄清楚了这个问题。 在Java中,将乱码转换为普通显示的UTF8编码中文很容易。 接下来是转换代码
//*
* LATIN1转UTF8
*
*@paramlatin1Latin1(iso_8859_1)字符串
* @return UTF8字符串
*/
publicstringencodingconvert (string latin1 ) {
返回新字符串(
latin1.getbytes (标准charsets.iso _ 8859 _1)、
标准charsets.utf _ 8
);
}
这是一种使用程序代码的处理方法,在某些情况下,需要直接从SQL返回的结果集中获取UTF8数据。 请看以下内容
SQL内置函数转换
上面的程序代码可以处理字符集转换,以下是用SQL转换
CONVERT和CAST函数:必须首先将LATIN1的转换为BINARY,然后将BINARY转换为UTF8
``````
选择
USER.USERID AS USERID,
USER.NICKNAME AS NICKNAME_LATIN1,
转换(
CAST (
转换(user.nicknameusinglatin1) AS BINARY
)使用utf 8
) AS NICKNAME_UTF8
来自
用户
WHERE
USERID=15889;
``````
其中LATIN1_COLUMN是LATIN1编码的字符集
最后,这样的变换可以是视图。 程序不需要转换
``````
CREATE VIEW V_USER AS
选择
USER.USERID AS USERID,
转换(
CAST (
转换(user.nicknameusinglatin1) AS BINARY
)使用utf 8
) AS NICKNAME
来自
用户;
``````