分析服务升级数据库脚本编码问题
来源:互联网 发布:福彩3d软件分析软件 编辑:程序博客网 时间:2024/06/06 14:14
一、编写目的
1、 了解常用文本文件编码格式,了解跨程序,跨操作系统文件的访问。
2、 规定mysql,达梦等数据库脚本的统一格式。
二、预备知识
1、 一个标准的文本文件应该是:文件头+文件内容 这样的格式。文件头指定了后面的文件内容是用什么编码,如:GBK,UTF8,UNICODE等。没有文件头的文件被认为是操作系统当前编码。WINDOW上认为是ANSI编码,Linux上认为是UTF8编码。
2、 没有文件头的文件(通常是程序生成的一些文件等)在不同的程序,不同的系统中交互会存在障碍。例如:A程序用GBK编码写日志文件 A.log, B程序希望读取A.log这个文件,但B程序采用的标准编码是UTF8编码,直接读A.log就会出现乱码。这时B程序需要明确知道A是什么编码格式,将读取出来的内容转化为UTF8编码才能使用。
3、经常我们写日志文件不加文件头,但是用记事本都能打开查看。这时因为记事本有个强大的功能,会根据内容的上下文和操作系统的语言猜测是使用什么方式的编码,但一般程序并不具备这个功能。当用记事本另存为...并指定保存的编码格式,记事本就会在文件中加入文件头标记。常用的文件头标记:
ANSI: 无 中文WINDOWS系统上就认为是GBK编码
UTF-8: 0xEF,0xBB, 0xBF 前3个BYTE
UNICODE16 BE: 0xFE, 0xFF 前2个BYTE
UINCODE16 LE: 0xFF,0xFE 前2个 BYTE
用一些二进制查看工具如(UltraEdit)等,可查看前几个字节确定编码格式。
有一个经典的例子,就是打开记事本,写“联通”两个字,然后保存,这时是按ANSI保存的,保存关闭后再用记事本打开它,就变成乱码了,因为联通两个字的ANSI编码恰好与UTF-8文件头一样,记事本会认为这个是文件头标记,再读取就乱码了。
4、 应为我们常用GBK和UTF8编码,这两种编码在英文字母和符号的编码上是重合的,所以转不转都是一样的,但涉及到中文字符就不一样了。
5、所以如果我们生成的文件如果要被第三方程序使用,我们尽量写入文件头信息,其他程序会判断文件头信息来确定我们是采用的什么编码(虽然现在的采用的UTF8居多)。读取文件的时候也一样先判断是否有文件标记头,根据文件标记头确定后续数据的编码。如果与自己程序采用的编码方式不一样,先转换为自己的编码再使用
三、数据库脚本出现的问题
1、目前我们的mysql开发基本采用Navicat相关工具开发,该工具“转存SQL语句”功能生成的文件,采用UTF8编码但没有写入文件头。导致我们读取这个脚本文件的时候认为是GBK编码的,在有中文的时候出现乱码,如果是在注释部分出现乱码还没问题,在具体语句上(特别是字典初始化)就会出现执行错误。
Sqlserver客户端工具保存脚本,没有这个问题,虽然没有文件头,但采用的是GBK编码。如果使用Navicat来开发sqlserver也要注意这个问题。
验证:可以将mysql转存的.sql文件,在sqlserver管理工具中打开,如果有中文,会显示乱码,sqlserver也是识别不了的。
四、解决方法
1、Navicat“转存SQL语句”功能生成的文件不能直接使用,将该文件用记事本打开另存为UTF8,并覆盖同名文件即可。这样记事本就会在.sql脚本文件开头加入文件标记。(不涉及到中文可以不用这样操作)
- 分析服务升级数据库脚本编码问题
- 数据库升级脚本
- MySQL数据库升级脚本
- 数据库升级脚本制作
- SQL脚本用Navicat导入MySQL数据库出现编码问题
- [摘抄-数据库-学习中] 服务升级时候所谓的增/减量脚本
- shell脚本远程升级数据库
- 数据库升级的shell脚本
- 【数据库】Oracle 12c升级检查问题分析
- shell脚本编码问题
- sh脚本编码问题
- shell脚本编码问题
- win8升级win8.1后,oracle数据库服务丢失,无法连接本地数据库问题
- 生产数据库要不要升级与ORACLE数据库支持服务内容和时限的问题
- GreenDao3 数据库升级问题
- 控制数据库服务启动脚本
- 数据库服务分析 同步
- 升级mysql数据库表的编码方式
- js补充笔记 1
- haproxy 4层和7层负载
- linux下基于libRTMP的接收流媒体的程序
- Oracle ADDM性能诊断利器及报告解读
- linux 防火墙设置及查看
- 分析服务升级数据库脚本编码问题
- ASSIGN COMPONENT <comp> OF STRUCTURE <s> TO <FS>.
- 斗地主AI算法——第十四章の主动出牌(3)
- selenium的chromedriver与chrome浏览器的对应关系表
- Linux netstat命令详解
- bzoj1057(洛谷1169)最大01子矩阵和最大01子正方形
- 爬取新浪微博数据+新浪微博模拟登录+mysql+python
- mysql中sql语句的妙用
- kMeans算法(K均值聚类算法)