ThinkPHP 3.2.3 資料表大小寫問題(查詢時候強制轉換小寫)解決辦法
阿新 • • 發佈:2019-02-10
ThinkPHP官方解決方案:
//在配置中加入
'DB_PARAMS' => array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL), // 資料庫連線引數
親測行不通 (或許是我操作問題,如果有同樣問題的同學,請接著往下看)
//ThinkPHP/Common/funcitons.php //line 457 return trim(preg_replace("/[A-Z]/", "\\0", $name), "_"); //去掉strtolower(),把"_\\0"中"_"去掉 function parse_name($name, $type=0) { if ($type) { return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match){return strtoupper($match[1]);}, $name)); } else { // return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_")); return trim(preg_replace("/[A-Z]/", "\\0", $name), "_"); } }
//ThinkPHP/library/Think/Model.class.php //line 1470 $this->trueTableName = $tableName; //去掉strtolower public function getTableName() { if(empty($this->trueTableName)) { $tableName = !empty($this->tablePrefix) ? $this->tablePrefix : ''; if(!empty($this->tableName)) { $tableName .= $this->tableName; }else{ $tableName .= parse_name($this->name); } // $this->trueTableName = strtolower($tableName); $this->trueTableName = $tableName; } return (!empty($this->dbName)?$this->dbName.'.':'').$this->trueTableName; }
最後再來個 mysql 不能建立大寫的表名問題
[mysqld]
#(0:區分;1:不區分)資料表區分大小寫
lower_case_table_names=0