case-insensitive (12)
Я огляделся по сторонам и не нашел, что мне нужно, так вот.
SELECT * FROM trees WHERE trees.`title` LIKE "%elm%"
Это работает отлично, но не если дерево называется Elm или ELM и т. Д. ...
Как сделать SQL-регистр незаметным для этого поиска в wild-card?
Я использую MySQL 5 и Apache.
Answers
Я делаю что-то подобное.
Получение значений в нижнем регистре и MySQL делает все остальное
$string = $_GET["string"]; mysqli_query($con,"SELECT * FROM table_name WHERE LOWER(column_name) LIKE LOWER("%$string%")");
И для MySQL PDO Alternative:
$string = $_GET["string"]; $q = "SELECT * FROM table_name WHERE LOWER(column_name) LIKE LOWER(?);"; $query = $dbConnection->prepare($q); $query->bindValue(1, "%$string%", PDO::PARAM_STR); $query->execute();
SELECT * FROM trees WHERE trees.`title` COLLATE UTF8_GENERAL_CI LIKE "%elm%"
Фактически, если вы добавите COLLATE UTF8_GENERAL_CI в определение вашего столбца, вы можете просто опустить все эти трюки: он будет работать автоматически.
ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI.
Это также приведет к восстановлению любых индексов в этом столбце, чтобы они могли использоваться для запросов без указания «%»,
Вам не нужно ALTER любую таблицу. Просто используйте следующие запросы перед запросом SELECT который вы хотите использовать подстановочный знак:
Set names `utf8`; SET COLLATION_CONNECTION=utf8_general_ci; SET CHARACTER_SET_CLIENT=utf8; SET CHARACTER_SET_RESULTS=utf8;
хорошо в mysql 5.5, как и оператор, нечувствителен... поэтому, если ваша долина - это вяза или ELM или Elm или eLM или любой другой, и вы используете «% elm%», он отобразит все соответствующие значения.
Я не могу сказать о более ранних версиях mysql.
Если вы идете в Oracle, например, работайте с учетом регистра, поэтому, если вы наберете «% elm%», он пойдет только для этого и игнорирует верхние регионы.
Странно, но так оно и есть:)
Это пример простого запроса LIKE:
SELECT * FROM