首页 > 数据库技术 > 详细

[PHP] Laravel 体现 MySQL、Sqlite 数据的大小写敏感

时间:2019-12-09 10:28:39      阅读:144      评论:0      收藏:0      [点我收藏+]

 

要想实现数据比对的大小写敏感,方式是设置数据库字段类型 或者 字段校验字符集。

 

MySQL 和 Sqlite 所支持的 collations 形式是不同的,你可以通过以下文档了解到。

MySQL collations :https://dev.mysql.com/doc/refman/5.7/en/charset-binary-collations.html

Sqlite collations:https://www.sqlite.org/datatype3.html(7. Collating Sequences)

 

MySQL 可以分别对 服务器、数据库、表、字段 的字符校验进行设置

MySQL 要开启数据大小写敏感的时候,如果不想全局设置,那么可以对具体字段选择 collations,简述如下:

  二进制字符(BINARY,VARBINARY,BLOB)有一个 binary 的 collation。

  非二进制字符(CHAR,VARCHAR,TEXT)的 collation 是字符集加 _bin 后缀,比如 utf8mb4_bin。

 

在 Laravel 的单元测试中,一般会使用 Sqlite 的内存数据库进行数据存储测试,简单快速。

<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>

 

基础 TestCase 初始化中,一般是需要执行 migrate 创建表的,这样才能进行后面的数据库功能测试。

所以,一种方式是,在 migration 文件中对 DB_CONNECTION 进行判定,执行对应驱动的 ·字段· 或者 ·collation· 设置 。

public function up()
{
    if (env(DB_CONNECTION) == mysql) {
        Schema::table(tags, function (Blueprint $table) {
            $table->string(name, 13)->collation(utf8mb4_bin)->change();
        });
    } else if (env(DB_CONNECTION) == sqlite) {
        // For phpunit sqlite driver
        Schema::table(tags, function (Blueprint $table) {
            $table->binary(name)->change();
        });
    } else {

    }
}

 

Other Article:https://www.cnblogs.com/paul8339/p/6932138.html

Link:https://www.cnblogs.com/farwish/p/11993040.html

[PHP] Laravel 体现 MySQL、Sqlite 数据的大小写敏感

原文:https://www.cnblogs.com/farwish/p/11993040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!