yangweijie/think-orm-dm

适用于 think-orm 的 dm 数据库

v2.0.2 2024-07-13 10:22 UTC

This package is auto-updated.

Last update: 2024-09-13 10:36:50 UTC


README

dm 数据库适用于 ThinkPHP6 think-orm 2.0 3.0 正在 v 2.0 分支开发中

达梦数据库对单双引号有严格的规定,在执行 SQL 语句时,字符串常量应使用单引号括起,关键字、对象名、字段名、别名等则使用双引号括起。而 MySQL 中则没有严格的规定,在适配过程中 MySQL SQL 语句中的单双引号严格按照 DM 的规定修改。

配置

TIME_ZONE=(480)
LANGUAGE=(cn)
CHAR_CODE=(PG_UTF8)
KEYWORDS=(user,label)

Windows 在 system32 中更改后需要重启 fpm,只重启服务无效。不配置 CHAR_CODE,PHP 显示查询数据会 GBK 乱码,异常也会乱码。

COMPATIBLE_MODE=4

兼容性函数

find_in_set 参见 src/db/dm.sql

扩展的安装

win

dmdbms/drivers/php_pdo 中复制相应版本的 phpxx_dm.dllpdoxx_dm.dll

到 php ext 目录里(如果是 nts 就复制 phpxxnts_dm.dllpdoxxnts_dm.dll

然后在 php.ini 中添加以下配置

[dm]
extension = pdo74nts_dm.dll
extension = php74nts_dm.dll

dm.port=5237

; 是否允许持久性连接

dm.allow_persistent = 1

; 允许建立持久性连接的最大数. -1 为没有限制.

dm.max_persistent = -1

; 允许建立连接的最大数(包括持久性连接). -1 为没有限制.

dm.max_links = -1

; 默认的主机地址

dm.default_host = localhost

; 默认登录的数据库

dm.default_db = SYSTEM

; 默认的连接用户名

dm.default_user = SYSDBA

; 默认的连接口令.

dm.default_pw = SYSDBA

;连接超时,这个参数未实际的用到,等待服务器支持

dm.connect_timeout = 10

;对于各种变长数据类型,每列最大读取的字节数。如果它设置为 0 或是小于 0,那么,读取变长字段时,将显示 NULL 值

dm.defaultlrl = 4096

; 是否读取二进制类型数据,如果它设置为 0,那么二进制将被 NULL 值代替

dm.defaultbinmode = 1

;是否允许检察持久性连接的有效性,如果设置为 ON,那么当重用一个持久性连接时,会检察该连接是否还有效

dm.check_persistent = ON

然后,将 dmdbms/bin 下以 dm 开头的所有 dll 复制到 system32 目录里

linux

框架配置

config/database.php 中配置

~~ 'default'='dm', 'dm'=>[ 'type'=>'dm', 'hostname'=>'localhost', 'hostport'=>5236, 'username'=>'SYSDBA', 'password' => 'SYSDBA', 'database'=>'blog', 'charset' => Env::get('database.charset', 'utf8'), 'prefix' => 'dp_', ] ~~

特殊用法

随机排序

$ret = ApiLog::order('[rand]')->limit(10)->select();

获取兼容模式

Db::connect('dm')->getCompatibleMode();

私有方法

\think\db\Dm::procedureName('proc');  // 转换为 `database`.`proc`

bug

max(id) bigint 返回了小数点,dump 函数 float 显示了一位小数,var_dump 没问题

todo

    • 测试表分区功能
    • 测试 xa 事务
    • 测试 mac 平台
    • 测试出一些 MySQL 函数 DM 没有并找出替代方案
    • 编写单元测试

PS

经过一轮自测基本使用没问题了,如果你的系统没有使用一些 MySQL 的高级用法,如 xa 事务、分区、锁,可以大胆地使用本库进行迁移测试。希望大家多测试,及时反馈问题给我。数据库驱动移植是我第一次尝试,最终的任务是人力和测试字符串替换了。“锁”粗略看了下,比较复杂,貌似不支持行锁。replace into 对应的 merge into 文档里也写得比较复杂