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,
        ],

        // 更多的数据库配置信息
    ],
相关推荐
较劲男子汉9 分钟前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变14 分钟前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记2 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
qq_353737542 小时前
网站评分系统API
php
huaweichenai2 小时前
中国工商银行支付对接
php
搂着猫睡的小鱼鱼3 小时前
Ozon 商品页数据解析与提取 API
爬虫·php
roman_日积跬步-终至千里3 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科3 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦3 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
晚霞的不甘5 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d