Выборка регистрозависимых данных из MySQL
Типовая, казалось бы, задачка. Выбрать из таблицы данные, зависимые от регистра.
А вот как бы проблема, да? Потому что таблица имеет на полях utf8_general_ci — что значит что она регистронезависима.
mysql> SHOW CREATE TABLE test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> SELECT * FROM test;
+----+----------+
| id | text |
+----+----------+
| 1 | ТЕСТ |
| 2 | тест |
+----+----------+
2 rows in set (0.10 sec)
mysql> SELECT * FROM test WHERE text='тест';
+----+----------+
| id | text |
+----+----------+
| 1 | ТЕСТ |
| 2 | тест |
+----+----------+
2 rows in set (0.01 sec)
Паника. utf8_general_cs не включён — ERROR 1273 (HY000): Unknown collation: 'utf8_general_cs'
SET COLLATION_CONNECTION='utf8_bin';
SET COLLATION_SERVER='utf8_bin';
Не помогают.
Хехе, решение простое)
mysql> SELECT * FROM test WHERE text='тест' COLLATE utf8_bin;
+----+----------+
| id | text |
+----+----------+
| 2 | тест |
+----+----------+
1 row in set (0.02 sec)
Первое решение было, впрочем, не очень красивым но тоже достойным сущестовать
mysql> SELECT * FROM test WHERE text RLIKE '^тест$';
+----+----------+
| id | text |
+----+----------+
| 2 | тест |
+----+----------+
1 row in set (0.02 sec)