ホームページ  >  記事  >  データベース  >  MySQL に保存されるフィールドでは大文字と小文字が区別されないことをご存知ですか?

MySQL に保存されるフィールドでは大文字と小文字が区別されないことをご存知ですか?

步履不停
步履不停オリジナル
2019-06-19 13:30:377974ブラウズ

MySQL に保存されるフィールドでは大文字と小文字が区別されないことをご存知ですか?

00 簡単なレビュー

#以前、mysql テーブルの大文字と小文字の区別について記事を書きましたが、実際には、mysql のフィールドに格納される内容は大文字と小文字が区別されません。

確認したい:

Linux におけるデータベース名、テーブル名、カラム名、およびエイリアスに関する MySQL の大文字化ルールは次のとおりです:

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

であるユーザーをクエリします。結果は、3 つのレコードすべてがクエリされました。 <pre class="brush:php;toolbar:false">mysql&gt; SELECT username from tb_user where username = 'user'; +----------+ | username | +----------+ | user     | | User     | | USER     | +----------+ 3 rows in set</pre>この例を通じて簡単に説明すると、フィールドの内容はデフォルトで大文字と小文字が区別されません。

02 解決策

**フィールドの内容はデフォルトでは大文字と小文字が区別されないためです。 **したがって、解決策は、フィールドの内容に検証ルールを追加することです。

mysql の

BINARY

キーワードを使用して、大文字と小文字を区別して検索します。

クエリ 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='用户表'

Use

NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

フィールド内の varchar 型の設定はすべて大文字と小文字が区別されます。これら 2 つの表示テーブルの詳細は、基本的にフィールドに 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 の設定と一致させて、環境の不一致によって奇妙な問題が発生するのを防ぎます。

開発中に奇妙な問題に遭遇したことがありますか?メッセージを残して共有することを歓迎します。

MySQL 関連の技術記事の詳細については、

MySQL チュートリアル 列にアクセスして学習してください。

以上がMySQL に保存されるフィールドでは大文字と小文字が区別されないことをご存知ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。