mysql查詢對大小寫不敏感的問題

**之前項目到遇到了這樣的問題來總結一下**

項目中經常用到模糊查詢,如:有個username字段的的內容是:AA812135023,我們查詢這條記錄,查詢的sql select * from 表 where username 
like '%AA%',能找到這條記錄,但是用 select * from 表 where username like '%aa%' 也能查詢到這條記錄.

問題出在哪裏?出現在創建數據表上,應該用下面的code創建表

CREATE TABLE `message` (
  `msgId`      BIGINT(20) NOT NULL
  COMMENT '消息ID',
  `bizType`    INT(11)    NOT NULL
  COMMENT '消息業務類型   參見枚舉BizType',
  `bizId`      INT(11)    NOT NULL
  COMMENT '消息對應的業務ID',
  `src`        BIGINT(20) NOT NULL
  COMMENT '發送者ID',
  `dst`        BIGINT(20) NOT NULL
  COMMENT '接受者ID',
  `msgStatus`  INT(11)    NOT NULL
  COMMENT '消息狀態   參見枚舉MsgStatus',
  `status`     INT(11)             DEFAULT '0'
  COMMENT '參考枚舉:Status',
  `createBy`   INT(11)             DEFAULT '0',
  `createTime` DATETIME            DEFAULT NULL,
  `updateBy`   INT(11)             DEFAULT '0',
  `updateTime` DATETIME            DEFAULT NULL,
  `lastUpdate` TIMESTAMP  NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`msgId`)
)
  ENGINE = InnoDB //使用的搜索引擎,有以下幾種引擎:ISAM、MyISAM、HEAP、InnoDB和Berkley(BDB)
  DEFAULT CHARSET = utf8 //編碼格式,有時候數據庫亂碼就出現在這裏.
  DEFAULT COLLATE = utf8_bin;//查詢對大小寫敏感

那不是每個表都需要下面這段東西,這樣顯的比較繁瑣,

 ENGINE = InnoDB //使用的搜索引擎,有以下幾種引擎:ISAM、MyISAM、HEAP、InnoDB和Berkley(BDB)
  DEFAULT CHARSET = utf8 //編碼格式,有時候數據庫亂碼就出現在這裏.
  DEFAULT COLLATE = utf8_bin;//查詢對大小寫敏感

我們創建數據庫的時候,用下面的code就不用每個表都寫上面這一段了

create database test default character set utf8 collate utf8_bin;

如果你的數據已經建好了,修改即可

ALTER SCHEMA `bbj_local`  DEFAULT CHARACTER SET utf8  DEFAULT COLLATE utf8_bin ;

如何修改mysql默認的搜索引擎?

1、查看mysql存儲引擎命令,在mysql>提示符下搞入show engines;字段 Support爲:Default表示默認存儲引擎  
2、設置InnoDB爲默認引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句
3、重啓mysql服務器:mysqladmin -u root -p shutdown或者service mysqld restart 登錄mysql數據庫,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章