【MySql】Mysql EEscortROENCORE 1067: Invalid default value for ‘date’ 杀绝

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

哪些在MySQL中拿到更加好的全文字笔迹核查索结果  
作者: Techrepublic.com.com 
2006-04-03 11:14:53 

一、概述
     
MySQL全文字笔迹考验索是运用查询关键字和查询列内容之间的相关度进行检索,能够运用全文索引来提升相配的速度。

通过逐个审查,原本是MySQL的配备难题,在wamp下,MySQL
5.7里是未曾设置 SQL_MODE 的。

众多互连网应用程序都提供了全文字笔迹查证索功用,客商能够应用一个词大概词语片断作为查询项目来定位相称的记录。在后台,那些程序选拔在三个SELECT查询中的LIKE语句来施行这种查询,固然这种方式使得,但对此全文字笔迹考验索来讲,那是黄金年代种作用极端低下的法子,特别在拍卖多量数量的时候。

二、语法
      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索引)。

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

MySQL针对那后生可畏标题提供了大器晚成种基于内建的全文字笔迹核算索方法的减轻方案。在那,开拓者只供给轻易地方统一标准记出必要全文检索的字段,然后利用异乎经常的MySQL方法在那一个字段运维寻找,这不仅仅升高了质量和作用(因为MySQL对那个字段做了索引来优化寻找卡塔尔国,并且实现了越来越高素质的物色,因为MySQL使用自然语言来智能地对结果评级,以去掉不相干的品种。

三、检索格局
     1、自然语言检索: IN NATURAL LANGUAGE MODE

2.万生机勃勃未有SQL_MODE,就增进,有就更正一下

那篇小说将向你汇报在MySQL中怎么着实行全文字笔迹查证索。

     2、布尔检索: IN BOOLEAN MODE
         
剔除百分之五十相配行以上都有的词,举例说,每一种行都有this那个字的话,那用this去查时,会找不到此外结果,那在笔录条数非常多时很有用,
         
原因是数据库感觉把全体行都寻找来是从未有过意义的,当时,this大概被看作是stopword(中断词);但是若独有两行记录时,是吗鬼也查不出来的,
          因为各类字都现身八分之四(或上述卡塔 尔(英语:State of Qatar),要幸免这种气象,请用IN BOOLEAN
MODE。

sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

1、设置基本表格

       ● IN BOOLEAN MODE的特色: 
          ·不剔除百分之五十以上相符的row。 
          ·不自动以相关性反向排序。 
          ·能够对未有FULLTEXT index的字段进行检索,但会极慢。 
          ·限定最长与最短的字符串。 
          ·套用Stopwords。
 
       ● 找出语法则则:
         +   应当要有(不带有该重大词的多少条均被忽略)。 
         –   不得以有(消逝钦命关键词,含有该重大词的均被忽视)。 
         >   提升该条相称数据的权重值。 
         <   减少该条相配数据的权重值。
         ~   将其相关性由正转负,表示全部该字会减弱相关性(但不像 –
将之撤除),只是排在较前面权重值减弱。 
         *   万用字,不像别的语法放在近些日子,那么些要接在字符串前边。 
         ” ” 用双引号将风流倜傥段句子包起来表示要统统合乎,不可拆字。

3.重启MySQL;

从创设定确立法规案例子表格初步,使用以下的SQL命令:

         SELECT * FROM articles WHERE MATCH (title,content) AGAINST
(‘+apple -banana’ IN BOOLEAN MODE);
         + 表示AND,即必得含有。-
代表NOT,即必须不分包。即:再次来到记录须要包蕴 apple,且不可能包罗 banner。

mysql> CREATE TABLE reviews (id INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT, data TEXT);

         SELECT * FROM articles WHERE MATCH (title,content) AGAINST
(‘apple banana’ IN BOOLEAN MODE);
        
apple和banana之间是空格,空格代表O福睿斯。即:再次来到记录最少含有apple、banana中的八个。

以上命令创立了叁个简短的音乐专融资料库(主如果整段的文字卡塔 尔(阿拉伯语:قطر‎,然后向这么些表格中增添一些记录:

         SELECT * FROM articles WHERE MATCH (title,content) AGAINST
(‘+apple banana’ IN BOOLEAN MODE);
        
再次来到记录必得带有apple,同一时候banana可含蓄也可不带有,若满含的话会获取更加高的权重。

mysql> INSERT INTO `reviews` (`id`, `data`) VALUES

         SELECT * FROM articles WHERE MATCH (title,content) AGAINST
(‘+apple ~banana’ IN BOOLEAN MODE);
         ~
是大家耳濡目染的异或运算符。重返记录必需带有apple,若也包罗了banana会裁减权重。
         但是它从未 +apple -banana
严酷,因为后面一个假如含有banana压根就不回去。

(1, ‘Gingerboy has a new single out called Throwing Rocks. It’s great!’);

         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”的权重。

mysql> INSERT INTO `reviews` (`id`, `data`) VALUES 

    3、查询扩张检索: WITH QUE途锐Y EXPANSION

(2, ‘Hello all, I really like the new Madonna single. 

四、MySQL全文字笔迹考验索的口径限定
    
1、在MySQL5.6之下,唯有MyISAM表协理全文字笔迹核算索。在MySQL5.6上述Innodb引擎表也提供支撑全文检索。
     2、相应字段创设FULLTEXT索引

One of the hottest tracks currently playing…I’ve been listening to it all day’);

五、与全文字笔迹核实索相关的系统变量:
     ft_min_word_len = 全文字笔迹查验索的最小许可字符(默许4,通过 SHOW
VA凯雷德IABLES LIKE ‘ft_min_word_len’ 可查看),
     汉语平时是八个字便是三个词,所以做汉语的话必要改进这么些值为2最棒。

mysql> INSERT INTO `reviews` (`id`, `data`)

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

VALUES (3, ‘Have you heard the new band Hotter Than Hell?

     2、预设 MATCH…AGAINST 是以相关性排序,由高到低。

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

     3、MATCH(title, content)里的字段必须和FULLTEXT(title,
content)里的字段大同小异。
          要是假定单查title或content一个字段,那得其它再建二个FULLTEXT(title) 或
FULLTEXT(content),也因为这么,MATCH()的字段一定不能够跨table,可是别的三种检索方式附近能够。
    
    
4、MySQL不扶助汉语全文索引,原因很简短:与爱尔兰语差异,普通话的文字是连着一块儿写的,中间未有MySQL能找到分词的地点,结束近来MySQL5.6版本是如此,可是有转移的办法,就是将整句的中文分词,并按urlencode、区位码、base64、拼音等进行编码使之以“字母+数字”的主意存款和储蓄于数据库中。

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

七、实验部分

证实数据的不错录入:

◆ 步骤1 配备my.ini,在my.ini末尾加多如下:

mysql> SELECT * FROM reviews;

# 更正全文字笔迹核算索的最小许可字符为2个字符或汉字
ft_min_word_len = 2

+—-+——————————————–+

完成后“重启 MySQL 服务”,并用 SHOW VARIABLES LIKE ‘ft_min_word_len’
查询下是或不是拿走了不利的结果值为2,如下图:
图片 1

| id | data                                       |

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

+—-+——————————————–+

◆ 步骤3 创立数据表
CREATE TABLE `zzx_articles` (
`id` int(10) unsigned NOT NULL auto_increment, 
`title` char(254) default NULL COMMENT ‘标题’,
`content` text COMMENT ‘内容’,
`author` char(60) default NULL COMMENT ‘作者’,
`title_fc` char(254) default NULL COMMENT ‘题指标分词’,
`content_fc` text COMMENT ‘内容的分词’,
PRIMARY KEY  (`id`),
FULLTEXT KEY `zzx_title_fc` (`title_fc`),
FULLTEXT KEY `zzx_content_fc` (`content_fc`),
FULLTEXT KEY `zzx_title_con_fc` (`title_fc`,`content_fc`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

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

# 倘诺中期须要添全文加索引能够用如下语句:
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 | Hello all, I really like the new Madon … |

◆ 步骤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’),
(‘中华’,’中国 ‘),
(‘中华情 和谐’,’上海 和谐’),
(‘污染之都’,’你好 小编是 北京 人’),
(‘法国首都精气神’,’立异 爱国 宽容 厚颜’)

|  3 | Have you heard the new band Hotter Than… |

安排结果如下图:
图片 2

+—-+——————————————–+

◆ 步骤5 找寻语准绳则、排序 实验
   表达:相称语句 MATCH (col1,col2,…) AGAINST (expr
[search_modifier]) 匹配成功后,会回来此条数据的权重值(权重值1 ≈
各种词的相称结果权重值之和),大家使用此权重值“由高到低”排序可优化查询结果。

3 rows in set (0.00 sec)

  

   ▶ 实验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

   图片 3

   总计:1.当未曾加 + –
那样的过滤符号时,这几个根本词是“或(or)”的涉及,即:要么相配optimizing,要么匹配ok,要么相配red,要么匹配blue。
           2.经过地方实验,开掘当某条数据有多少个至关心珍视要词相配时(如:red
blue),此条数据的权重值会略高:
              此条数据权重值 ≈ optimizing权重值 + ok权重值 + red权重值 +
blue权重值
             
理论上来讲,当一条数据能相配上的尤为重要词愈来愈多,则此条数据的权重值越高,排行越靠前。

2、定义全文字笔迹查证索字段

  

   ▶ 实验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

   图片 4

   总结:使用了过滤符号 +
,表示查询结果中,任一条数据都一定要含有”red”那些词,不满含”red”那一个词的行均被忽视。

接下去,定义您要作为全文搜索索引的字段

  

   ▶
实验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

   图片 5

  
计算:与试验2相比较,当满含了red的行中,若也带有blue关键词,权重确实增添了(如:id=4那条)。

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

  

   ▶ 实验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

   图片 6

   总括:可知 + –
那三个标识是象征“并且(and)”的意思,即:必需富含red关键词 and
无法富含blue关键词。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

CopyRight © 2015-2019 金沙中心城 All Rights Reserved.
网站地图xml地图