Laravel中如何选择名称包含点号的数据库
Laravel连接名称带点号的数据库报错解决方案
问题复现场景
- 业务需要对接的目标数据库名称包含点号,具体库名为
t.produk - 在Laravel中配置数据库连接指定该库名时,触发无效标识符报错
- 尝试直接将库名以普通字符串形式写入配置、写入环境变量,仍复现相同报错
报错原因
MySQL语法中,点号是用于分隔「数据库名.表名」的特殊标识符,未做转义处理的t.produk会被SQL解析器拆分为「t库下的produk表」,自然找不到对应目标。
Laravel底层拼接连接、查询SQL时,默认不会对包含特殊字符的库名、表名自动加转义符,就会触发这个报错。
修复步骤
- 修改数据库连接配置,将带点号的库名用MySQL标识符转义符(反引号)包裹后填入配置
- 如果直接修改配置文件
config/database.php,对应mysql连接的database项写法如下:
'mysql' => [ // 其余host、port、username、password等配置保持原有值不变 'database' => '`t.produk`', ],- 如果通过
.env环境变量配置,直接修改DB_DATABASE项即可:
DB_DATABASE=`t.produk` - 如果直接修改配置文件
- 清除Laravel的配置缓存,避免旧缓存导致配置不生效:
php artisan config:clear
注意:不要使用斜杠、双引号等方式做转义,MySQL仅识别反引号作为自定义标识符的边界包裹符,转义后解析器会将
t.produk识别为完整的单个库名,不会再按点号拆分语义。修改配置时反引号要写在配置值的内部,不要写到包裹配置值的单引号外面。
配置完成后重新发起数据库请求,即可正常连接目标库拉取数据。
内容的提问来源于stack exchange,提问作者Ken Arya
相关产品推荐
相关产品推荐

