mysql 查询关键字有中文_Laravel Backpack 后台列表页面查询关键词包含中文时报错...

报错信息如下

Next Illuminate\Database\QueryException: SQLSTATE[HY000]:

General error: 1271 Illegal mix of collations for operation 'like'

(SQL: select count(*) as aggregate from `worker` where (`id` like %是是% or `na

me` like %是是% or `tel` like %是是% or `project` like %是是% or `team` like %是是% or `role` like %是是% or `in_time` like %是是% or `name` like %是是% or `id` like %是是%) order by `updated_at` desc) in

vendor/laravel/framework/src/Illuminate/Database/Connection.php:647

而使用英文单词时就一切正常。

查了一下,这是因为 MySQL 5.5 之后不允许对 datetime 字段进行 like 操作。

异常苦恼。。。 backpack 限制的很死,只要是显示在列表页的字段都会被默认加入搜索支持,改 搜索逻辑感觉也十分耗时。对于这种一次性写了就扔的项目完全不值得耗费时间。

所以,我有了一个十分大胆的想法。。。

把 datetime 字段改成 varchar 。。。

ALTER TABLE `worker`

CHANGE COLUMN `in_time` `in_time` VARCHAR(255) NULL DEFAULT NULL ;

更新之后,世界清净了。

Laravel Backpack 3.3 之后的解决方法,增加 searchLogic 设置。

$created_at = [

'name' => 'created_at',

'label' => '创建时间',

'searchLogic' => false,

];

更合逻辑的写法

参考

https://github.com/Laravel-Backpack/CRUD/issues/101

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值