1. 程式人生 > >ThinkPHP 3.2.3 資料表大小寫問題(查詢時候強制轉換小寫)解決辦法

ThinkPHP 3.2.3 資料表大小寫問題(查詢時候強制轉換小寫)解決辦法

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