будь позитивным человеком
Пишите, исправляйте ошибки, улучшайте себя
У меня рай, ориентированный на программирование, и цветут весенние цветы!
00 Краткий обзор
Я уже писал статью о чувствительности таблиц к регистру в mysql. На самом деле содержимое, хранящееся в полях в mysql, не чувствительно к регистру. В этой статье кратко подытожим.
Хотите пересмотреть:
Правила случая имени базы данных MySQL, имени таблицы, имени столбца и псевдонима в Linux следующие:
1. Имя базы данных и имя таблицы строго чувствительны к регистру;
2. Псевдоним таблицы строго чувствителен к регистру;
3. Имена столбцов и псевдонимы столбцов нечувствительны к регистру во всех случаях;
4. Содержимое поля по умолчанию нечувствительно к регистру.
01 Пример
Простой пример:
CREATE TABLE `tb_user` (
`id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` VARCHAR (50) NOT NULL COMMENT '用户名',
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表';
INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('1', 'user');
INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('2', 'User');
INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('3', 'USER');
Используйте имя пользователя запроса оператора запроса для всех строчных букв.user
, в результате запрашиваются все три записи.
mysql> SELECT username from tb_user where username = 'user';
+----------+
| username |
+----------+
| user |
| User |
| USER |
+----------+
3 rows in set
Этот пример просто показывает, что содержимое поля по умолчанию нечувствительно к регистру.
02 Решения
**Поскольку содержимое поля по умолчанию нечувствительно к регистру, то есть нечувствительно к регистру. ** Таким образом, решение состоит в том, чтобы добавить правило проверки содержимого поля.
используя mysqlBINARY
Ключевые слова делают поисковый кейс кейсом.
присоединиться к sql запросаBINARY
ключевые слова
mysql> select * from tb_user where BINARY username ='user';
+----+----------+
| id | username |
+----+----------+
| 1 | user |
+----+----------+
1 row in set
Этот метод относительно прост, вам не нужно менять структуру таблицы, вам нужно только добавить ключевые слова перед полями, которые нужно опрашивать. У этого метода также есть недостатки: каждый раз, когда вы пишете запрос, вы должны уделять внимание добавлению ключевых слов, и вам может потребоваться изменить много кода.
Ограничение при создании таблиц
CREATE TABLE `tb_user1` (
`id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` VARCHAR (50) BINARY NOT NULL COMMENT '用户名',
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表';
mysql> show create table tb_user1;
tb_user1 | CREATE TABLE `tb_user1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'
1 row in set
или использовать
CREATE TABLE `tb_user2` (
`id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` VARCHAR (50) NOT NULL COMMENT '用户名',
`info` VARCHAR (100) NOT NULL COMMENT '详情描述',
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE=utf8_bin COMMENT = '用户表';
mysql> show create table tb_user2;
tb_user2 | CREATE TABLE `tb_user2` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '用户名',
`info` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '详情描述',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表'
использоватьNGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Все настройки типа varchar в поле чувствительны к регистру. Детали этих двух таблиц просмотра по существу добавляются к полям.COLLATE utf8_bin
.
03 Резюме
Случай значений полей контролируется правилами сортировки MySQL. Когда дело доходит до правил корректуры, мы должны говорить о наборе символов. Набор символов — это набор символов и кодировок, а сопоставление — это набор правил для сравнения символов в наборе символов. Как правило, сопоставление начинается с связанного с ним имени набора символов, обычно включает имя языка и заканчивается _ci (без учета регистра), _cs (с учетом регистра) или _bin (двоичный).
Например, набор символов utf8, как показано в следующей таблице:
1) utf8_bin: utf8_bin сохраняет каждый символ в строке как двоичные данные с учетом регистра.
2) utf8_general_ci: utf8_genera_ci не чувствителен к регистру, ci — это аббревиатура от case insensitive, то есть нечувствительный к регистру.
3) utf8_general_cs: utf8_general_cs чувствителен к регистру, cs — это аббревиатура от casesensitive, то есть чувствителен к регистру.
Примечание. Я использую версию 5.7, которая не поддерживает набор символов utf8_general_cs, что приводит к ошибке.
Благодаря содержанию предыдущей статьи и этой статьи у каждого есть определенное понимание чувствительности MySQL к регистру.В реальной разработке лучше всего использовать строчные буквы для имен библиотек и таблиц и обращать внимание на использование заглавных букв в содержимом хранилища полей. И сделайте конфигурацию локальной среды разработки mysql согласованной с конфигурацией mysql на сервере, чтобы предотвратить некоторые странные проблемы из-за несогласованных сред.
Сталкивались ли вы с какими-то странными проблемами во время разработки? Добро пожаловать, чтобы оставить сообщение, чтобы поделиться.
04 Ссылки
Woohoo. Слушайте эхо NT и net.com/MySQL/womenforms…
Блог Woohoo.cn на.com/как мне нравится/боюсь/…
Спасибо за чтение, если вы найдете этот пост в блоге полезным, пожалуйста, поставьте лайк, чтобы его увидело больше людей! Желаю тебе счастливого дня!
Что бы вы ни делали, пока вы продолжаете это делать, вы увидите разницу! На дороге ни смиренный, ни заносчивый!
Я надеюсь, что мы с тобой сможем стать лучшей версией себя на жизненном пути и стать одиноким человеком.
© Фейюнь, который с каждым днем становится все лучше