可匹配任意类型和长度的字符,是对字符集在排

2019-09-22 作者:数据库   |   浏览(82)

1、导入数据库

 

其中关于条件,SQL提供了四种匹配模式:

 

1) 登录
mysql -uroot -p
Enter password:

2) 创建数据库
create database pluto_0;

3)导入
source /var/www/mlcloud/sql/pluto_0.sql;

Preface

1、%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

字符集&&排序规则

 

 

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

字符集是针对不同语言的字符编码的集合,比如UTF-8字符集,GBK字符集,GB2312字符集等等,不同的字符集使用不同的规则给字符进行编码
排序规则则是在特定字符集的基础上特定的字符排序方式,排序规则是基于字符集的,是对字符集在排序方式维度上的一个划分。
排序规则是依赖于字符集的,一种字符集可以有多种排序规则,但是一种排序规则只能基于某一种字符集的
比如中文字符集,也即汉字,可以按照“拼音排序”、“按姓氏笔划排序”等等。
而对于英语,就没有“拼音”和“姓氏笔画”,但是可以分为区分大小写、不区分大小写等等
而其他语言下面也有自己特定的排序规则。

    Today I'm gonna test how to rescue a dropped table from binlog server based on a full Xtrabackup backup set.

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

在SQL Server中,任何一种字符集的数据库,都能存储任何一种语言的字符。
并不是说拉丁(Latin)字符集的数据就存储不了中文,中文(Chinese)字符集的数据库就存储不了蒙古语(只要操作系统本身支持)
sqlserver中,不管哪种字符集(实际上是排序规则)的数据库(或者字段),都是可以使用nvarchar(或者nchar),而nvarchar(或者nchar)是可以存储任意非Unicode字符的
至于排序规则,那是根据不同的字符集所支持的不同的排序规则人为定义的。

 

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

 

Framework

若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

SQL Server中的字符集和排序规则
排序规则只不过是指定了存储的数据的排序(比较)规则而已,换句话说就是,排序规则中已经包含了字符集的信息。
因此在sqlserver中 ,不需要关心字符集,只需要关心排序规则,sqlserver中在创建只能指定排序规则(不能直接指定字符集),
如截图,只能指定collation,也就是字符集

 

2、_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

图片 1

Hostname IP/Port Identity OS Version MySQL Version GTID Mode Binlog Format
zlm1 192.168.56.100/3306 master CentOS 7.0 5.7.21 on row
zlm2 192.168.56.101/3306 slave CentOS 7.0 5.7.21 on row
zlm3 192.168.56.102/3306 binlog server CentOS 7.0 5.7.21 on row

比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

 

 

再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;

在MySQL中的字符集和排序规则**

Precedure

3、[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

上面说了,排序规则是依赖于字符集的,一种字符集可以有多种排序规则,但是一种排序规则只能基于某一种字符集的。
如下是MySQL中排序规则和字符集的对应关系。

 

比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
将找出“张三”、“李三”、“王三”(而不是“张李王三”);

图片 2

Step 1: Create binlog server.

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;

MySQL的建库语法比较扯,可以指定字符集和排序规则,
如果指定的排序规则在字符集的下面,则是没有问题的,如果指定的排序规则不在字符集下面,则会报错。

 

4、[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如下面这一句,排序规则utf8_bin是属于字符集utf8下面的一种排序规则,这个语句执行是没有问题的
create database test_database2 charset utf8 collate utf8_bin;
再比如下面这一句,排序规则latin1_bin不是属于字符集utf8下面的一种排序规则,这个语句执行是会报错的
create database test_database2 charset utf8 collate latin1_bin;

Check the position on master 

比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

图片 3

1 zlm@192.168.56.100:3306 [sysbench]>show master status;
2  ------------------ ---------- -------------- ------------------ ------------------------------------------------- 
3 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                               |
4  ------------------ ---------- -------------- ------------------ ------------------------------------------------- 
5 | mysql-bin.000098 |      363 |              |                  | 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715693 |
6  ------------------ ---------- -------------- ------------------ ------------------------------------------------- 
7 1 row in set (0.00 sec)

SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
将排除“老1”到“老4”,寻找“老5”、“老6”、……

以上是字符集和排序规则在sqlserver和MySQL中的一些基本应用,再说说常用的排序规则的区别

 

5、查询内容包含通配符时

 

**Make binlog server begin to receive binlog.**

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

***_genera_ci & ***_genera_cs & ***_bin 常见排序规则的特点

 1 [root@zlm3 16:25:01 /data]
 2 #mysqlbinlog -R --raw -h192.168.56.100 -urepl -prepl4slave -P3306 --stop-never mysql-bin.000098 &
 3 [1] 4375
 4 mysqlbinlog: [Warning] Using a password on the command line interface can be insecure.
 5 
 6 [root@zlm3 16:26:24 /data]
 7 #ls -l
 8 total 4
 9 drwxr-xr-x 2 mysql mysql  32 Jun 10 03:41 backup
10 drwxr-xr-x 3 mysql mysql  22 Mar 18 16:05 mysql
11 -rw-r----- 1 root  root  363 Jul 29 16:26 mysql-bin.000098

function sqlencode(str)
str=replace(str,"[","[[]") '此句一定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function

以上是某种字符集下常用的三种排序规则,下面以常见的utf8为例说明
utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感,
utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感,但是目前MySQL版本中已经不支持类似于***_genera_cs的排序规则,直接使用utf8_bin替代。
utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
那么,同样是区分大小写,utf8_general_cs和utf8_bin有什么区别?
cs为case sensitive的缩写,即大小写敏感;bin的意思是二进制,也就是二进制编码比较。
utf8_general_cs排序规则下,即便是区分了大小写,但是某些西欧的字符和拉丁字符是不区分的,比如ä=a,但是有时并不需要ä=a,所以才有utf8_bin
utf8_bin的特点在于使用字符的二进制的编码进行运算,任何不同的二进制编码都是不同的,因此在utf8_bin排序规则下:ä<>a

 

在查询前将待查字符串先经该函数处理即可。

在utf8_genera_ci的情况下A=a,ä=a

**Flush two logs on master.**

 图片 4

 1 zlm@192.168.56.100:3306 [sysbench]>flush logs;
 2 Query OK, 0 rows affected (0.06 sec)
 3 
 4 zlm@192.168.56.100:3306 [sysbench]>flush logs;
 5 Query OK, 0 rows affected (0.01 sec)
 6 
 7 zlm@192.168.56.100:3306 [sysbench]>show master status;
 8  ------------------ ---------- -------------- ------------------ ------------------------------------------------- 
 9 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                               |
10  ------------------ ---------- -------------- ------------------ ------------------------------------------------- 
11 | mysql-bin.000100 |      194 |              |                  | 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715693 |
12  ------------------ ---------- -------------- ------------------ ------------------------------------------------- 
13 1 row in set (0.00 sec)

 在utf8_bin排序规则下,A<>a,ä<>a

 

图片 5 

**Check whether the newly generated binlogs are successfully transmited to binlog server.**

所以要想区分大小写,有没有特殊需求,就直接使用utf8_bin(实际上***_general_cs在MySQL中本身就不支持,在SQL Server中支持)
以上字符集的特点以及使用情况在SQL Server中表现为类似。

1 [root@zlm3 16:26:27 /data]
2 #ls -l
3 total 12
4 drwxr-xr-x 2 mysql mysql  32 Jun 10 03:41 backup
5 drwxr-xr-x 3 mysql mysql  22 Mar 18 16:05 mysql
6 -rw-r----- 1 root  root  410 Jul 29 16:27 mysql-bin.000098
7 -rw-r----- 1 root  root  241 Jul 29 16:27 mysql-bin.000099
8 -rw-r----- 1 root  root  194 Jul 29 16:27 mysql-bin.000100

 

本文由小鱼儿玄机30码发布于数据库,转载请注明出处:可匹配任意类型和长度的字符,是对字符集在排

关键词: 小鱼儿玄机30码

  • 上一篇:没有了
  • 下一篇:没有了