>

【MySql】Mysql E中华VRO奇骏 1067: Invalid default value

- 编辑:乐百家599手机首页 -

【MySql】Mysql E中华VRO奇骏 1067: Invalid default value

透过排查,原本是MySQL的布置难题,在wamp下,MySQL 5.7里是未有安装 SQL_MODE 的。

mysql> ALTER TABLE reviews ADD FULLTEXT INDEX (data);

  

   ▶ 实验3:过滤条件:必得含有"red"关键词,要是协作到的行中还带有"blue"关键词,则会对此条数据增添权重:

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red blue') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by title_score DESC

   或上边写法:
   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red >blue') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red >blue' IN BOOLEAN MODE) order by title_score DESC

   图片 1

   计算:与尝试2相比,当包涵了red的行中,若也暗含blue关键词,权重确实扩展了(如:id=4那条)。

3、运维全文字笔迹核准索

  

   ▶ 实验6:过滤条件:相配饱含单词“red”和“Linux” 的行,或含有“red” 和“blue”的行(无前后相继顺序)
                然则带有 “apple Linux”的行较包蕴“apple blue”的行有更加高的权重值。

   SELECT *,MATCH (title_fc) AGAINST (' red  (>Linux <blue)') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST (' red  (>Linux <blue)' IN BOOLEAN MODE) order by title_score DESC

   图片 2

   ------------------------------------------------------------------------------------------------------------------------------ 

   ▶ 实验7:过滤条件:相配关键词以 re 开始,或以 bl 起首的数据行

   SELECT *,MATCH (title_fc) AGAINST ('re* bl*') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('re* bl*' IN BOOLEAN MODE) order by title_score DESC

   图片 3

   总结:注意 * 是写在后头哦,那时也就是 like 模糊相配,未有权重值了

   ------------------------------------------------------------------------------------------------------------------------------ 

   ▶ 实验8:过滤条件:相配查找字符串“To Use MySQL”关键词

   SELECT *,MATCH (title_fc) AGAINST ('"To Use MySQL"') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('"To Use MySQL"' IN BOOLEAN MODE) order by title_score DESC

   图片 4

   总计:那时候是把双引号内的的字符串看成多少个重大词,若不用双引号则是将 To Use MySQL 多个第后生可畏词去分别相配,两个有分别;

在给一个表增多字段的时候,突然发掘会报二个date类型的字段的暗中认可值错误,烦恼~

申明数据的不错录入:

  

   ▶ 实验10:在实验9的基础上,在select字段条件里增添多少个red关键词,where里的关键词保持不改变(注意与试验1 实验9相比较)。

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red red red') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by title_score DESC

   图片 5

   总计:开采只要含有 red 关键词的多寡的权重值都扩大了,排序也时有产生了转移。
           表明经过“提重”——重复多次或多或少注重词权重值的不二诀窍可使部分数据权重值扩大,进而影响排序。

sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

These guys totally rock! Like, awesome, dude!');

  

   ▶ 实验1:只对 title_fc 索引字段做全文字笔迹查验索,并出示每条数据的权重值

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red blue') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by title_score DESC

   图片 6

   统计:1.当并未有加 - 那样的过滤符号时,那么些根本词是“或(or)”的关系,即:要么相称optimizing,要么相配ok,要么相配red,要么相配blue。
           2.因而上边实验,发现当某条数占有八个根本词相配时(如:red blue),此条数据的权重值会略高:
              此条数据权重值 ≈ optimizing权重值 ok权重值 red权重值 blue权重值
              理论上来说,当一条数据能相称上的首要词越来越多,则此条数据的权重值越高,排行越靠前。

1.my.ini文书中找到 [mysqld]

| id |

# 假设早先时期要求添全文加索引能够用如下语句:
alter table `zzx_articles` add fulltext zzx_title_fc(`title_fc`); 
alter table `zzx_articles` add fulltext zzx_con_fc(`content_fc`); 
alter table `zzx_articles` add fulltext zzx_title_con_fc(`title_fc`,`content_fc`);

2.若无SQL_MODE,就增加,有就改过一下

---------- --------------- -------- ------ ------------ ---------

         SELECT * FROM articles WHERE MATCH (title,content) AGAINST (' apple (>banana <orange)' IN BOOLEAN MODE);
         再次来到必得同不日常间包含“apple banana”恐怕必得同临时间包括“apple orange”的记录。
         若同有的时候候包括“apple banana”和“apple orange”的记录,则“apple banana”的权重高于“apple orange”的权重。

3.重启MySQL;

1、设置基本表格

  

   ▶ 实验2:过滤条件:必得包括"red"关键词

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red' IN BOOLEAN MODE) order by title_score DESC

   图片 7

   计算:使用了过滤符号 ,表示查询结果中,任一条数据都不得不含有"red"那些词,不含有"red"这些词的行均被忽视。

--------- --------------- -------- ------ ------------ ---------

  

   ▶ 实验4:过滤条件:必得含有"red"关键词,何况不能够包罗"blue"关键词

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red blue') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red -blue' IN BOOLEAN MODE) order by title_score DESC

   图片 8

   总结:可以预知 - 那多个暗记是意味着“并且(and)”的意思,即:必须含有red关键词 and 不能够富含blue关键词。

| reviews |  data         | NULL   | YES  | FULLTEXT   |         |

  

   ▶ 实验13:另三个角度看排序
     看贰个SQL语句原型,如若性别字段值为“1”突显“男”不然展现“女”
     select *,IF(sex=1,"男","女") as ssva from 表名 where id = 1

     我的新排序思路:假设 title_fc 和 content_fc 同时合营上的行做重要排序,然后对只相配上 title_fc 的做补助排序,只相称上 content_fc 的再度要排序。 (对于实验5的排序不正确的地方在于:假诺有贰个对content_fc关键词的相称权重异常高,引致了求和后 score1 的值也高,但对title_fc的相称权重去为0,由于score1值高却排到了前头那不一定科学吗?)

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red blue') as title_score,MATCH (content_fc) AGAINST ('optimizing ok red blue') as content_score,IF(MATCH (title_fc) AGAINST ('optimizing ok red blue') > 0 AND MATCH (content_fc) AGAINST ('optimizing ok red blue') > 0,1,0) as score1
   FROM zzx_articles 
   WHERE MATCH (title_fc,content_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by score1 DESC,title_score DESC,content_score DESC

图片 9

   总结:如果 title_fc 和 content_fc 都特别上了,做为优先排序理之当然,但也应思虑局部权重值过高的难题哦。

| reviews |  id           | NULL   |      | BTREE      |         |

         SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('apple banana' IN BOOLEAN MODE);
         apple和banana之间是空格,空格代表OCRUISER。即:重临记录起码含有apple、banana中的一个。

Records: 3  Duplicates: 0  Warnings: 0

七、实验部分

|  3 |

三、检索形式
     1、自然语言检索: IN NATURAL LANGUAGE MODE

----

  

   ▶ 实验12:进一层优化 排序准绳

       看贰个SQL语句原型,查询“字段1,字段2”两字段,相同的时候将每条数据的“字段1”与“字段2”的求和作为“字段3”字段:
       select 字段1,字段2,字段1 字段2 as 字段3
       from 表名
       where .....

   下面将 title_fc 和 content_fc 两权重值求和,放入新字段 score第11中学,并按 score1 首要排序,title_score 次之,content_score再次之:

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red blue') as title_score,MATCH (content_fc) AGAINST ('optimizing ok red blue') as content_score,MATCH (title_fc) AGAINST ('optimizing ok red blue') MATCH (content_fc) AGAINST ('optimizing ok red blue') as score1
   FROM zzx_articles 
   WHERE MATCH (title_fc,content_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by score1 DESC,title_score DESC,content_score DESC

图片 10

   计算:相对来讲,即使 title_fc 和 content_fc 都优质上了,应予以靠前的排名呢。所以首要按其 title_fc 和 content_fc 两权重值之和排行,
            次要再思量 title_fc、content_fc 排序。

如上命令创立了一个简易的音乐专融资料库(主如果整段的文字卡塔尔,然后向那几个表格中增多一些笔录:

六、总括事项
     1、预设搜寻是不分大小写,若要分大小写,columne 的 character set要从utf8改成utf8_bin。

在那,MATCH()将用作参数传递给它的字段中的文字与传递给AGAINST()的参数进行比较,假设有相当的,那就依据正规的秘技赶回。注意你能够传递不仅叁个字段用MATCH()来查阅­-只需用逗号来划分字段列表。

一、概述
      MySQL全文字笔迹核算索是应用查询关键字和查询列内容之间的相关度实行搜索,能够运用全文索引来升高相称的快慢。

---- --------------------------------------------

  

   ▶ 实验9:在实验1底工上,将blue的权重值忽略不要(注意与试验1相比较)

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by title_score DESC

   图片 11

   总计:在尝试1的底工上,这时剔除select字段条件里的blue关键词,但在where里去仍保留blue关键词。
            小编的本意是想平常匹配“optimizing ok red blue”那多少个根本词,但不想获得blue的权重值(忽略blue的权重值)。
            查询的结果是含有blue关键词的数额的权重值会略下落了。
            通过“降重”——忽视有个别首要词权重值的措施可使部分数据权重值减小,进而影响排序。

|  2 |

◆ 步骤5 搜索语法规则、排序 实验
   表达:相配语句 MATCH (col1,col2,...) AGAINST (expr [search_modifier]) 相配成功后,会回到此条数据的权重值(权重值1 ≈ 种种词的合作结果权重值之和),大家运用此权重值“由高到低”排序可优化查询结果。

怎么样在MySQL中获取更加好的全文检索结果  
作者: Techrepublic.com.com 
2006-04-03 11:14:53 

    3、查询增添检索: WITH QUE奥迪Q7Y EXPANSION

成百上千互连网应用程序都提供了全文字笔迹核查索成效,顾客能够利用三个词大概词语片断作为查询项目来定位匹配的记录。在后台,那几个程序选用在二个SELECT查询中的LIKE语句来实践这种查询,尽管这种办法有效,但对此全文检索来讲,那是生龙活虎种功能极端低下的措施,特别在管理大批量数目标时候。

  

    ▶ 实验14:优化实验13,可帮忙更目眩神摇的尺度排序
       看三个SQL语句原型,CASE WHEN THEN END 结构:

          CASE <单值表明式>
              WHEN <表明式值> THEN <SQL语句可能重临值>
              WHEN <表明式值> THEN <SQL语句只怕重返值>
               ...
              WHEN <表达式值> THEN <SQL语句可能再次来到值>
              ELSE <SQL语句大概重返值>
          END

       有一表查询:大于或等于80意味显示为“非凡”,大于或等于60显得为“及格”,小于60分显示为“不比格”。
       select (CASE WHEN 语文>=80 THEN '优秀' WHEN 语文>=60 THEN '及格' ELSE '不及格' END) as 语文,
              (CASE WHEN 数学>=80 THEN '优秀' WHEN 数学>=60 THEN '及格' ELSE '不及格' END) as 数学,
              (CASE WHEN 英语>=80 THEN '优秀' WHEN 英语>=60 THEN '及格' ELSE '不及格' END) as 英语
       from table_name

       # 实例测验一下
       select *,(CASE WHEN id<8 THEN '5' WHEN id=8 THEN '4' ELSE '0' END) as newfield
       from zzx_articles
       where id>5

       小编的新排序思路:若是 title_fc 和 content_fc 的权重值“同期大于0且相等”为重要排序,“同有时候大于0且不等于”的为帮衬排序,
       “title_fc 大于0的重新要排序”,假如用 IF() 貌似倒霉达成,看上边语句:

       SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red blue') as title_score,MATCH (content_fc) AGAINST ('optimizing ok red blue') as content_score,
             (CASE WHEN MATCH (title_fc) AGAINST ('optimizing ok red blue') > 0 AND MATCH (title_fc) AGAINST ('optimizing ok red blue') = MATCH (content_fc) AGAINST ('optimizing ok red blue') THEN '3' WHEN MATCH (title_fc) AGAINST ('optimizing ok red blue') > 0 AND MATCH (title_fc) AGAINST ('optimizing ok red blue') <> MATCH (content_fc) AGAINST ('optimizing ok red blue') THEN '2' WHEN MATCH (title_fc) AGAINST ('optimizing ok red blue') > 0 THEN '1' ELSE '0' END) AS score1
       FROM zzx_articles 
       WHERE MATCH (title_fc,content_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by score1 DESC,title_score DESC,content_score DESC

图片 12

       总括:本实验的排序未必契合科学,但引出贰个更眼花缭乱准则的排序情势、角度,五种排序结合使用技巧做出更客观的排序,工夫使您的查找引擎越发智能。投石问路,或者你有越来越好的排序,请也享受给自身。

|  1 |

五、与全文字笔迹查验索相关的体系变量:
     ft_min_word_len = 全文字笔迹考验索的最小许可字符(暗许4,通过 SHOW VARubiconIABLES LIKE 'ft_min_word_len' 可查看),
     华语平时是三个字正是二个词,所以做汉语的话供给更正那个值为2最棒。

1 row in set (0.00 sec)

  

   ▶ 实验11:同时对 title_fc 和 content_fc 两字段做全文字笔迹查验索

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red blue') as title_score,MATCH (content_fc) AGAINST ('optimizing ok red blue') as content_score
   FROM zzx_articles 
   WHERE MATCH (title_fc,content_fc) AGAINST ('optimizing ok red blue' IN BOOLEAN MODE) order by title_score DESC,content_score DESC

   图片 13

   计算:通超过实际验发掘,又成功的取到了 content_fc 字段相称的权重值,排序方式是至关心珍视要按title字段权重降序排序,次要按 content_fc 权重降序排序。
           其余小编意识 ok 那几个关键词在对“title_fc char(254)”字段相配时获得相称值为2.1xxxxxxx,但对“content_fc text”字段相称时权重值去为0,
           那是MySQL对各日文单词权重值的付与有温馨的算法,大家无权过问。所以当大家发掘成些单词的权重值为零竟然为负时,不用过于纠结,
           因为MySQL有投机的算法。

           关于排序,首要按 title_score 字段权重降序排序,次要按 content_score 权重降序排序,这样的排序准则看起来更科学了,但自己想要得的搜索引擎绝不至于轻易如此呢,继续下边包车型大巴试验:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('hot*' IN BOOLEAN MODE); ----

  

    ▶ 实验15:中文全文字笔迹核查索
      MySQL不支持粤语全文字笔迹核算索,因为粤语一句话是连着写的,不像匈牙利(Magyarország卡塔 尔(英语:State of Qatar)语单词间有空格分隔。消除办法正是华语分词(关于中文分词请参阅此外小说),
      假诺您的MySQL是安装在Windows平台上的,能够不用转码直接存款和储蓄粤语就能够使用全文索引,如本例。可是假使你的MySQL是设置在Linux上的则要求进行转编码(urlencode / base64_encode / json_encode / 区位 / 拼音)等方案,具体方案参看此外博文。

      SELECT *,MATCH (title_fc) AGAINST ('中华 北京 和谐 security') as title_score,MATCH (content_fc) AGAINST ('中华 北京 和谐 security') as content_score,(case when MATCH (title_fc) AGAINST ('中华 北京 和谐 security') > 0 and MATCH (content_fc) AGAINST ('中华 北京 和谐 security') > 0 then '5' when MATCH (title_fc) AGAINST ('中华 北京 和谐 security') > 0 and MATCH (content_fc) AGAINST ('中华 北京 和谐 security') = 0 then '4' else '0' end) as score1
      FROM zzx_articles 
      WHERE MATCH (title_fc,content_fc) AGAINST ('中华 北京 和谐 security' IN BOOLEAN MODE) order by score1 DESC,title_score DESC,content_score DESC

图片 14

 

来源:

4、使用逻辑找出修饰符(Boolean search modifiers卡塔尔

插入结果如下图:
图片 15

|  1 | Gingerboy has a new single out called ...  |

         SELECT * FROM articles WHERE MATCH (title,content) AGAINST (' apple ~banana' IN BOOLEAN MODE);
         ~ 是我们熟知的异或运算符。重返记录必须含有apple,若也隐含了banana会减少权重。
         但是它从未 apple -banana 严苛,因为前面一个若是带有banana压根就不回去。

----

完成后“重启 MySQL 服务”,并用 SHOW VARIABLES LIKE 'ft_min_word_len' 查询下是还是不是得到了不错的结果值为2,如下图:
图片 16

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST (' single -madonna' IN BOOLEAN MODE);

二、语法
      MATCH (col1,col2,...) AGAINST (expr [search_modifier])
      search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION }
      
      例如:SELECT * FROM tab_name WHERE MATCH ('列名1,列名2...列名n') AGAINST('词1 词2 词3 ... 词m');
    
      即:MATCH 约等于要同盟的列,而 AGAINST 就是要找的源委。  
      这里的table需固然MyISAM类型的表,col1、col2 必得是char、varchar或text类型,在询问早前须要在 col1 和 col2 上独家创造全文索引(FULLTEXT索引)。

Query OK, 3 rows affected (0.21 sec)

     2、布尔检索: IN BOOLEAN MODE
          剔除二分之一相称行以上都有的词,例如说,每一个行都有this那一个字的话,那用this去查时,会找不到任何结果,那在记录条数超级多时很有用,
          原因是数据库认为把装有行都寻找来是从未意思的,那个时候,this差不离被看做是stopword(中断词);不过若唯有两行记录时,是甚鬼也查不出来的,
          因为各种字都冒出八分之四(或上述卡塔尔国,要制止这种场所,请用IN BOOLEAN MODE。

They have five members and they burn their instruments when they play in concerts. 

  

   
   ▶ 实验5:过滤条件:必得包蕴"red"关键词,假设协作到的行中还含有"blue"关键词则稳中有降此条数据权重

   SELECT *,MATCH (title_fc) AGAINST ('optimizing ok red ~blue') as title_score
   FROM zzx_articles 
   WHERE MATCH (title_fc) AGAINST ('optimizing ok red ~blue' IN BOOLEAN MODE) order by title_score DESC

   图片 17

   总计:那么些试验未有观察明明作用,但 ~ 过滤符确实是下落此权重符

--------- --------------- -------- ------ ------------ ---------

◆ 步骤4 插入测量检验数据
INSERT INTO `zzx_articles` (title_fc,content_fc) VALUES
('MySQL Tutorial Linux red','DBMS stands for DataBase ok'),
('How To Use MySQL Well','After you went through blue'),
('Optimizing MySQL ok','In this tutorial we will optimizing'),
('MySQL vs this YourSQL blue red','1. Never run mysqld as root red'),
('MySQL Tricks blue','In the following database'),
('MySQL Security','When configured properly, MySQL'),
('中华','中国 '),
('中华情 和谐','上海 和谐'),
('污染之都','你好 笔者是 新加坡 人'),
('香水之都精气神','校订 爱国 包容 厚颜')

| id |

◆ 步骤2 创造数据库(视情状可跳过此步卡塔尔
CREATE DATABASE search DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

本文由乐百家数据库发布,转载请注明来源:【MySql】Mysql E中华VRO奇骏 1067: Invalid default value