在MySQL中是否可以使用以下设置的字段:
CHARACTER SET utf8mb4
COLLATE latin1_general_ci
我希望字段中的搜索不区分大小写,但我不希望搜索a匹配á。
例如:
SELECT * FROM table WHERE field ='abc';
应该找到:ABC
应该找到:abC
不应该找:ábc
不应该找:ÀBC
有可能做我想做的事吗?
答案 0 :(得分:0)
要在mysql中执行此操作:
SELECT * 从表 WHERE UPPER(field)= UPPER('string');
示例:
mysql> select * from item;
+---------+------------+
| id_item | state_item |
+---------+------------+
| 1 | complete |
| 2 | removed |
| 3 | REMOVED |
| 4 | REmoveD |
+---------+------------+
4 rows in set (0.01 sec)
mysql> SELECT * FROM item WHERE UPPER( state_item ) = UPPER( 'removed' );
+---------+------------+
| id_item | state_item |
+---------+------------+
| 2 | removed |
| 3 | REMOVED |
| 4 | REmoveD |
+---------+------------+
3 rows in set (0.01 sec)
mysql> SELECT * FROM item WHERE UPPER( state_item ) = UPPER( 'REMOVED' );
+---------+------------+
| id_item | state_item |
+---------+------------+
| 2 | removed |
| 3 | REMOVED |
| 4 | REmoveD |
+---------+------------+
3 rows in set (0.00 sec)
mysql>
这是你需要的吗?
如果您要使用另一个rdbms - CHECK约束将是一个选择,但在MySQL中它们不起作用。
这是一个工作量,您可以使用 BEFORE INSERT 和 BEFORE UPDATE 触发器来创建自己的bussines逻辑流程,这会导致错误或设置字段不满足数据要求时的默认值
请参阅此类触发器的示例:
DELIMITER $$
CREATE TRIGGER bi BEFORE INSERT ON Tbl
FOR EACH ROW
BEGIN
IF(NEW.col1 != REGEXP '^[A-Z]+$') THEN
SET {you insert,updets etc here }
SIGNAL SQLSTATE '1'
SET MESSAGE_TEXT := 'check constraint on Tbl.col1 failed';'
END IF;
END$$
DELIMITER ;