此文章发布于68
个月前,部分信息可能已经过时
,请自行斟酌确认。
先吐槽一下:最新刚入门
ThinkPHP
才发现真是入坑了,框架是不错就是官方社区太冷清了,问个问题基本没人搭理。
项目背景
最近用 ThinkPHP 重构公司的移动 App 服务端,公司 ERP 数据库使用 Sql Server 数据库并且排序规则是Chinese_PRC_BIN
,于是在使用 ThinkPHP 中的 SqlSrv 驱动查询数据时报错了。
错误信息:
获取数据出错SQLSTATE[42S02]: Microsoft[SQL Server]对象名 'information_schema.tables' 无效。
临时解决方案
出错是因为 TP 内置的 SqlSrv 数据库连接驱动中获取表结构用的小写表名,而 Sql Server 数据库中排序规则决定了要区分大小写,数据库中表名和字段名是大写的。微酷是临时这样处理的:
- 修改:
thinkphp/library/think/db/connector/Sqlsrv.php
- 将
information_schema
表相关的表名及字段名改成大写。