thinkphp6 + oracle 数据库连接 表名、字段名大小写和字符集

之前一直用tp6连接的都是mysql数据,近期一个项目需要连接oracle数据,理论上thinkphp是支持oracle数据库的,但是由于oracle的数据库编码方式和字段表名大小写与mysql不一样。首先oracle的表名默认是全大写的,可是如果使用tp6连接的话会把大写字母一个个的用下划线分开,如USERS会被分成u_s_e_r_s,这就很扯淡了,解决这个有两种方法,一种是禁用think框架里大写分隔过滤功能,但是如果改了这个每次系统升级后就会失效,还有一种就是直接在model里指定表名,虽然麻烦了点,但是不影响以后框架升级,具体方法如下

php 复制代码
<?php
namespace app\model;

use think\Model;

/**
 * @mixin \think\Model
 */
class Users extends Model
{
    //这里直接添加表名,调用的时候直接用模型就行
    protected $table = 'USERS';
}

这个问题解决了,但是使用模型查询时一旦有字符串查询就会因为模型返回中会调用核心框架的json函数导致一直报错

"model Malformed UTF-8 characters, possibly incorrectly encoded"

经查询资料,使用php连接字符串时是可以指定字符集的,不影响原数据库的字符集,但是thinkphp官方没有完整的oracle连接示例,写的不对,一直报错,最后在研究了自带的连接文件后总算弄了个易懂规范的格式,分享出来,也纪录一下,省得自己忘了。

还有就是如果加上参数可以将oracle表中默认字段大写改成全部小写,这样也就保持命名规范了,要不然看着怪怪的。

// 数据库连接参数字段名大小写

'params' => [

\PDO::ATTR_CASE => \PDO::CASE_LOWER,

],

php 复制代码
// 数据库连接配置信息
    'connections'     => [
        'oracle' => [
            // 数据库类型
            'type'            => env('database.type', 'oracle'),
            // 服务器地址
            'hostname'        => env('database.hostname', '127.0.0.1'),
            //端口号
            'hostport'        => env('database.hostport', '1521'),
            // 数据库实例名
            'database'        => env('database.database', 'orcl'),
            //编码类别
            'charset'         => env('database.charset', 'AL32UTF8'),
            // 用户名
            'username'        => env('database.username', 'root'),
            // 密码
            'password'        => env('database.password', ''),
          
            // 数据库连接参数
            'params'          => [
                \PDO::ATTR_CASE => \PDO::CASE_LOWER,
            ],           
            // 数据库表前缀
            'prefix'          => env('database.prefix', ''),
            // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
            'deploy'          => 0,
            // 数据库读写是否分离 主从式有效
            'rw_separate'     => false,
            // 读写分离后 主服务器数量
            'master_num'      => 1,
            // 指定从服务器序号
            'slave_no'        => '',
            // 是否严格检查字段是否存在
            'fields_strict'   => true,
            // 是否需要断线重连
            'break_reconnect' => false,
            // 监听SQL
            'trigger_sql'     => env('app_debug', true),
            // 开启字段缓存
            'fields_cache'    => false,
        ],

        // 更多的数据库配置信息
    ],
相关推荐
星霜笔记21 分钟前
Docker 部署 MariaDB+phpMyAdmin+Nextcloud 完整教程
运维·数据库·docker·容器·mariadb
hotlinhao1 小时前
php版的FormCreate使用注意事项
php·crmeb
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
天宇_任7 小时前
Mysql数据库迁移到GaussDB注意事项
数据库·mysql·gaussdb
鱼鱼说测试7 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
xiep14383335109 小时前
Ubuntu 安装带证书的 etcd 集群
数据库·etcd
Java小白程序员10 小时前
Spring Framework:Java 开发的基石与 Spring 生态的起点
java·数据库·spring
老虎062710 小时前
数据库基础—SQL语句总结及在开发时
数据库·sql·oracle
网硕互联的小客服12 小时前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
爱掘金的土拨鼠12 小时前
国产化dm数据库锁表解锁
数据库