我有两个表:
单词
表:
+----+-------+------+
| id | word | lang |
+----+-------+------+
| 1 | uña | es |
| 2 | two | en |
| 3 | three | en |
| 4 | four | en |
+----+-------+------+
stop_words
表:
+----+------+------+
| id | word | lang |
+----+------+------+
| 1 | una | es |
| 2 | one | en |
+----+------+------+
我需要从 words
表中选择一个单词,但该单词不在 stop_words
表中
如果我尝试以下查询,结果为空,因为
中的uña
来自words
与stop_words
una
匹配SELECT * FROM words a WHERE word LIKE 'uñ%' AND lang = 'es' AND NOT EXISTS( Select * FROM stop_words as b WHERE a.word = b.word AND lang = 'es'
)
如果我尝试使用
BINARY
,结果似乎没问题但失败,如果不使用相同的大小写(例如:Uñ
而是uñ
)SELECT * FROM words a WHERE word LIKE BINARY 'Uñ%' AND lang = 'es' AND NOT EXISTS( Select * FROM stop_words as b WHERE BINARY a.word = BINARY b.word AND lang = 'es' )
我使用 utf8mb4_unicode_ci
作为数据库、表和列。
知道如何解决这个问题吗?
最佳答案
SELECT id, word, lang
FROM words
WHERE BINARY word NOT IN (Select BINARY word FROM stop_words);
结果:
+----+-------+------+
| id | word | lang |
+----+-------+------+
| 1 | uña | es |
| 2 | two | en |
| 3 | three | en |
| 4 | four | en |
+----+-------+------+
对表使用 utf8_unicode_ci
编辑: 对于同样的情况
SELECT id, word, lang
FROM words
WHERE BINARY LOWER(word) NOT IN (Select BINARY LOWER(word) FROM stop_words);
关于Mysql SELECT unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47035415/