编码
记一次潍坊现场更新数据库脚本过程中的问题。
脚本本地未做测试,在潍坊运行时,频繁出现各种报错信息,中文均变成GBK式的乱码情况,结果是有很多表和信息未能更新成功。
本地用UltraEdit打开sql脚本文件可以看到是UTF-8格式的,接着我用notepad++做了编码转换,即转换为ANSI,再执行时除了表已建立和约束唯一,没有其他问题。那么问题来了:ANSI到底是什么编码格式。
https://www.cnblogs.com/malecrab/p/5300486.html回答了这个问题,结论如下:
自然notepad++中的ANSI就是GBK了,对应UltraEdit中的ANSI/OEM-GBK编码,并且通过下列语句查询潍坊Oracle也得出数据库编码是GBK。所以转化为ANSI之后脚本才执行成功。
SELECT * FROM v$nls_parameters
但是还有一个问题,notepad中转换为ANSI之后,文字并没有变成GBK式的乱码,而用UltraEdit转换为ANSI/OEM-GBK编码之后,明显看出变成了GBK式的乱码,其中原因还没弄清楚。转为ANSI也许是这么回事:notepad将当前内容转换为GBK,相当于新建一个编码为GBK的文档然后copy内容保存。而使用ANSI编码:将内容以ANSI的形式转码。
但需要注意的是,我发觉在UltraEdit中,UTF8转为GBK和新建文档调整为GBK再写入保存,两者是不一样的。前者会导致中文出现GBK式的乱码,而后者不会。同理GBK转为UTF8和新建调整为UTF8也是不一样的,前者会产生UTF8样式的乱码,而后者是正常的。
TF8样式的乱码,而后者是正常的。**
在新建记事本的时候,注意到下面保存格式有两个选项:UTF8、ANSI。看来ANSI默认应该是GBK的。