达梦数据库安装
达梦数据库是仿oracle,结构与其类似。有schema,表,表空间等概念。表在schema 下, 表空间是个存储概念,多个表可以存在一个表空间。
- 官网下载的安装包,默认有一年的使用期。 www.dameng.com/list_103.ht…
SQL
官方文档对 sql 这写的不详细,我只看了大概。字段类型与mysql有些不同,
- varchar -> varchar
- longtext,mediumtext,tinytext -> clob
- datetime -> TIMESTAMP
- NOW() -> SYSDATE
- AUTO_INCREMENT -> IDENTITY
-
达梦数据库是区分大小写的,在初始化实例时,可以设置成不区分大小写。 这样sql 跟原始sql 接近。mysql语法可直接使用。如果区分大小写,表名,列名,都需要加"", 才能正常运行sql 如: select "name" from tt."tt"
-
转义字符,mysql 转义字符是 \ , 达梦中是 ' 。
-
字符编码,0 = GB18030,1 = UTF-8,2 = EUC-KR,默认为0
-
LENGTH_IN_CHAR: varchar类型长度是否以字符为单位,为1表示以字符统计长度,为0以字节统计长度;
-
字符长度问题:如果 LENGTH_IN_CHAR = 0, varchar(32)这种,在mysql 中长度是够的,在达梦中长度需要 *3。在mysql中, 用 select length('中') 可以算出字符长度的,达梦中不对,select length(’中‘) 算出的是字符个数,不是长度.
最佳默认配置,大小写不敏感,utf-8,length_in_char = 1
dminit path=/dm/data
DB_NAME=DAMENG
INSTANCE_NAME=DMSERVER
PORT_NUM=5236
PAGE_SIZE=32
EXTENT_SIZE=32
CASE_SENSITIVE=0
UNICODE_FLAG=1
LENGTH_IN_CHAR=1
在达梦数据库中,这三个初始化参数在实例初始化时设置。不能修改,若发现选错了,只能重新初始化一个新的实例。
实例初始化
window: 在 tool\dbca.exe, 对实例增删改,实例服务在 window 服务 里,查找 dmService + 实例名,要删除实例时,先要停止实例。
遇到几次实例初始化失败的,也不知道为啥。
开发中遇到的问题
python
在开发过程中遇到的问题, python 为例:
- 占位符 %s => ?
select * from shenhua_news where id=?
- 字符串 “” =》 '
select * from shenhua_news where name='xxx'
- conn.ping(true) 不能用
- in [] => in ()
select * from bb where id in ('xx','yy')
sql 多个值时 [] => ()
insert_url = 'insert into bb values(?,?,?)'
cursor.execute(insert_url,('aa','bb'))
java 开发
下载驱动
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.140</version>
</dependency>
或在安装目录: dm\drivers\jdbc, DmJdbcDriver8.jar 是java8对应的驱动包
Druid
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
spring.datasource.username=SYSDBA
spring.datasource.password=xxxx
spring.datasource.url=jdbc:dm://xxx:5236?schema=SPIDERFLOW2&keyWords=(XML)
spring.datasource.filters= stat,slf4j
dm.jdbc.driver.DmDriver 是驱动包名,注意大小写,不是dm.jdbc.Driver.DmDriver
jdbc:dm://xxx:5236?schema=SPIDERFLOW2&keyWords=(XML) 表示驱动名,ip,port, schema,过滤的关键词
- 达梦中关键词有很多,可以用 SELECT * FROM V$RESERVED_WORDS; 查看
- SP_SET_PARA_STRING_VALUE(2, 'EXCLUDE_RESERVED_WORDS','XML'); 去除关键词,重启数据库才能生效
jdbc:
jdbc:dm://xxx:5236?SPIDERFLOW2 与druid 连接串不同
数据迁移
使用 dm数据迁移工具, 先评估,再迁移,使用时新建 mysql -> dm的迁移。
总之,达梦数据库能用,但时不时报个错,远没有mysql, sqlserver 那么流畅。迁移的过程要小心,细心,注意大小写,关键词这些问题,也祝大家的迁移之路顺畅。