Oracle 编码转换及相关问题

项目上要用到 oracle,于是乎又重新装了一个 oracle 11g,中间遇到一些小问题,在此记录。由于 oracle 系的产品一直不是很熟悉,以下的记录只是一些个人观点,有理解偏差的地方欢迎指正。

首先是安装,这个没什么可说的,第一步的邮件通知貌似需要连接国外服务器,在中国由于 GFW 的存在,不能正常使用。第二步会有一个选择字符集的选项,根据需要选择,最好同一项目组的数据库字符集保持一致。还有一个就是这里有个密码选项,这里是 sys 的密码。然后一路 next,到最后创建数据库的时候,会弹出一个用户列表,这里取消 scott 的默认禁用勾选项,设置密码。然后 system 用户也设置个密码就可以了。服务器安装完成后把 client 也安装了,这样再使用 navicat 连接和操作会比较方便,特别是像我这样的小白,有个图形化的界面,执行sql的时候就多了不少底气(基本命令忘记了可以直接 GUI 界面操作,哈哈:)顿时感觉一股弱者的气息~~)。

安装完成后遇到第一个坑,由于个人习惯,数据库的字符集在安装时候选择了 AL32UTF8 编码,然后原始数据存放的数据库,用的很可能是默认安装的,结果是默认的 ZHS16GBK 编码。在导入时候由于字节长度不一致,很多数据由于超出 UTF8 的长度导致无法导入。关于具体区别可以参考这篇文章

GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。

至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。

GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)
UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。
比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。

UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛,GBK是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大

为保证数据正确导入,需要进行数据库的编码转换操作。具体操作过程如下(上班好累,有些英文的资料懒得翻译了):

  1. 使用任意账户登录 sql plus.
  2. 在登陆状态下切换到 sys 账户进行登陆。
    CONNECT SYS/密码 as sysdba
  3. 关闭数据库
    shutdown immediate;
  4. 启动数据库到 mount 状态
    startup mount;
  5. start a SQL trace for the current session
     alter session set sql_trace=true;
  6. 修改权限。(this command will put the db in restricted session. Typically, all users with the CREATE SESSION system privilege can connect to an open database. Opening a database in restricted mode allows database access only to users with both the CREATE SESSION and RESTRICTED SESSION system privilege; only database administrators should have the RESTRICTED SESSION system privilege.)
    alter system enable restricted session;
  7. JOB_QUEUE_PROCESSES specifies the maximum number of job slaves per instance that can be created for the execution of DBMS_JOB jobs and Oracle Scheduler (DBMS_SCHEDULER) jobs. DBMS_JOB and Oracle Scheduler share the same job coordinator and job slaves, and they are both controlled by the JOB_QUEUE_PROCESSES parameter.

    If the value of JOB_QUEUE_PROCESSES is set to 0, then DBMS_JOB jobs and Oracle Scheduler jobs will not run on the instance.

    alter system set job_queue_processes=0;
  8. 打开数据库
    alter database open;
  9. 修改数据库编码
    alter database character set internal_use ZHS16GBK;
  10. 再关闭数据库以便设置生效
    shutdown immediate;
  11. 重新开启数据库
    startup

完成后再次执行导入命令

 imp scott/tiger@databasename file=d:\outdata.dmp full=y

注意如果是本地的话 @databasename 貌似并不用写的样子~

可以发现导入成功了。

然后发现 navicat 突然连接不上了,报错

ora-28547:连接服务器失败,可能是 Oracle Net 管理失败

打开 navicat 的设置(工具-选项-其他-OCI),点击下拉按钮,会自动提示安装的 oracle client 安装路径下的OCI文件,例如

D:\app\UserName\product\11.2.0\client_1\bin\oci.dll

再次连接就能正常连接了。

想到接下来要倒腾 oracle ,心里真是好慌啊 T_T,不过这也是成长的机会,加油!向着全栈方向努力前进!

Mysql 5.7.10 zip 版本安装配置

好久没用 mysql 了,今天因为需要去官网下载了一个最新的 5.7.10 zip 版本。发现和以前的配置有些变化,记录一下(windows x64)(每次都跑去看文档,真是够了ヾ(≧へ≦)〃,不过官方文档写得真是好详细,点赞)。

  1. 下载完成后,校验 MD5,确认后解压,拷贝到需要的目录下。
  2. 这时候首先要做的事情是初始化。从 5.7.6 版本开始,解压版本不再有 data 文件夹,因此需要自己先创建一个 data 文件夹存放默认的数据文件。
  3. 创建完成后,复制 mysql 根目录下的 my-default.ini 并另存为 my.ini,my.ini 文件的位置若不在 mysql 根目录下,也不在系统的 path 变量中,则需要编辑 path 环境变量包含该配置文件路径。
  4. 打开 my.ini 文件,取消 basedir 和 datadir 的注释,并指定根目录(basedir)和数据目录(datadir)的路径,注意路径使用反斜杠(/),完成后保存。当然这一步也可以不指定,在启动时作为启动参数传入,然而作为一个懒人不想每次敲命令~
  5. 打开命令行并导航至 mysql 的 bin 目录,运行
    mysqld --initialize

    进行初始化,注意这里使用该命令会生成一个默认的 root 密码,具体执行过程建议参考官方文档

  6. 输入 mysqld –console 开启 mysql 服务。可以看到会在命令行打印出 mysql 的运行状态。
  7. 使用
    mysql -u root -p

    登陆并修改默认密码。这里注意由于是使用的 –initialize 进行的安全模式初始化,默认会为 ‘root’@’localhost’ 生成一个随机密码串,因此在第一次登陆时,需要找到 basedata 目录下的 计算机名.err 的标准错误输出文件。在里面可以看到有一串

    [Note] A temporary password is generated for root@localhost: V/T2dU%79/Ds

    日志,其中冒号后面的部分的就是系统生成的随机 root 密码,输入该密码即可以 root 身份成功登陆。

  8. 登陆后,运行
    ALTER USER root@localhost IDENTIFIED BY 'newpassword';

    修改 root 密码。

新年

dfb637ce86850a1e3568f652e19f4ae2
一个人的房间
窗外下过雨的街
再强烈的烟火都冷却
一句无声的再见
最后一日的湖边
连星光就要熄灭

一年年
心有相思血
听错的词
唱对的自己
野花明眸清亮
守候路口等到黑夜

渺小的光托在掌中
怎能轻易说出完满
纵然无知无解
心甘情愿
除了爱你
拱手让过去留有残缺

独一无二的每一日
我无比真实
喝最烈的酒
爱最凉的花
千江不远
一苇杭之
长风浩荡已来赴约
2015.12.31-2016.1.1