2016-09-30 4 views
2

Я получил этот код:Как найти точное строковое значение в MySQL?

select * from locality WHERE name ="ISTASYON" 

Это прекрасно работает с MySql. Проблема возникает, когда я пытаюсь выполнить, но результат неверен

код Результат:

28BAF9346A41E4E4E0501AAC4524363B 0  iSTASYON 
402881a4523b52d201523b6c2afb4166 0  İSTASYON 
402881a4523b52d201523b6c38b7417c 0  İSTASYON 
402881a4523b52d201523baa9faf0092 0  İSTASYON 
402881a4523b52d201523baab059009f 0  İSTASYON 
402881a4523b52d201523baad01a00b7 0  İSTASYON 
58441bc4c054447ebe1cddbfeef958b5 0  ISTASYON 
fa7fb88d1d4c41feb497b08f42066c82 1 2016-04-19 09:53:41.000000 İSTASYON 

Моя проблема заключается в том, что результаты содержат İstasyon, İstasyon, İstasyon, İstasyon, но я хочу только İstasyon

Как Для решения этой проблемы ?

+0

Вы используете нечувствительный к регистру набор символов? –

+2

Возможный дубликат [Как я могу сделать строковое сравнение SQL-кода в MySQL?] (Http://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on -mysql) – Shadow

+0

2-й ответ с наибольшим количеством опросов в дублированном вопросе - это самое простое решение – Shadow

ответ

1

Вы можете использовать оператор COLLATE или BINARY, чтобы заставить двоичного сравнения:

SELECT * FROM locality WHERE name COLLATE utf8_bin = "ISTASYON" 

или

SELECT * FROM locality WHERE BINARY name = "ISTASYON" 

Если вы хотите, чтобы столбец всегда лечиться таким образом, объявить его двоичном сверка.
См. docs для получения дополнительной информации.

+0

спасибо много ths –

0

Набор символов по умолчанию и сортировка по умолчанию - latin1 и latin1_swedish_ci, поэтому неважные сравнения строк по умолчанию нечувствительны к регистру. Это означает, что если вы выполняете поиск с помощью col_name LIKE 'i%', вы получаете все значения столбцов, начинающиеся с I или i. Чтобы сделать этот регистр чувствительным, убедитесь, что один из операндов имеет чувствительную к регистру или двоичную сортировку.

col_name COLLATE latin1_general_cs LIKE 'i%' 
col_name LIKE 'i%' COLLATE latin1_general_cs 
col_name COLLATE latin1_bin LIKE 'i%' 
col_name LIKE 'i%' COLLATE latin1_bin 
0

выберите * от местности, где BINARY имя = "İstasyon"

или

выберите * от местности, где имя = BINARY "İstasyon"

0

Plan A: Это будет чувствительный к регистру и чувствительность к акценту:

Было бы более эффективным (после установки) иметь столбец utf8_bin (или utf8mb4_bin. latin1latin1_bin) будет не хватает из-за турецких символов.

Установка является

ALTER TABLE tbl MODIFY COLUMN ... COLLATION utf8_bin ...; 

Внимание: Если вы хотите сделать случай складывание и/или акцент вскрыши с той же колонке (ы) в других ситуациях, это повредит те ситуации.

План B: Это касается бесчисленных ı и нескольких других турецких особенностей.

COLLATION utf8_turkish_ci (или utf8mb4_turkish_ci) обрабатывает эти равны: I=ı, а затем обрабатывает следующий как разные, и позже, но все равно: i=Ì=Í=Î=Ï=ì=í=î=ï=Ī=ī=Į=į=İ. Ü=ü приходят после U и до V. Аналогично Ğ=ğ пришел после G и до H. См. utf8 collations для более подробной информации.

1

Вы можете использовать такой запрос select, я также использую и полезен.

Select * from `users` where username COLLATE latin1_general_cs LIKE '%$email%'