MySQLのストレージフィールドは大文字と小文字を区別しない、あなたは知っていますか?

アクティブな人のことが

彼らのアップグレード、コーディング、変更のバグ

私は公園指向プログラミング、春を持っています!

(私は小さなパートナー検索からプログラミングを学びたいサークルTコミュニティに無料のビデオチュートリアルについて、より多くの業界関連の業界情報。ああ、絶対に無料!)

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つのレコードの結果をチェックし、ユーザー。

mysql> SELECT username from tb_user where username = 'user';
+----------+
| username |
+----------+
| user     |
| User     |
| USER     |
+----------+
3 rows in set

この単純な例により鈍感なデフォルトのケースで、フィールドの内容を説明しました。

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

使用NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_binタイプフィールドをVARCHARますが、すべて大文字と小文字を区別しています。詳細については、2つのテーブルCOLLATEのutf8_binと結合されたフィールドに本質的に参照してください。

03要約

ケースフィールドの値は、MySQLの照合によって制御されます。照合を述べたように、私はその文字セットを言わなければなりません。コード化されている記号や文字セット、照合は、文字セットの文字を比較するためのルールのセットです。一般的には、その名前の先頭に関連付けられた文字セットの照合は、通常は言語名が含まれ、そして_ CS(大文字と小文字を区別)または_bin(2元)終わり、(大文字と小文字を区別しません)_ciします。

たとえば、次のようにUTF8文字は、テーブルを設定します。

1)utf8_bin:バイナリデータ、大文字と小文字の区別を持つ文字列の各utf8_bin。

2)utf8_general_ci:大文字小文字を区別しないutf8_genera_ciは、CIは大文字と小文字を区別しない、すなわち、大文字と小文字を区別しないの略語です。

3)utf8_general_cs:大文字と小文字を区別utf8_general_cs、略称CSは大文字と小文字を区別し、すなわち、大文字と小文字が区別されます。

utf8_general_cs文字セットをサポートしていない私は、マシンの5.7バージョンを使用して、エラーを作成します。注意してください。

mysqlの上の前のこの1を介してコンテンツ、そして誰もが詳細に大文字と小文字を区別の問題も時価総額の問題の内容を保存するために小文字、メモフィールドを使用するのが最善のいくつかの知識を持っており、実際の開発、データベース名とテーブル名であります。矛盾環境といくつかの奇妙な問題を防止するように、ローカルの開発環境のMySQLサーバの設定と一貫性の上でのMySQLの設定をしましょう。

あなたはそれの開発にいくつかの奇妙な問題が発生しましたか?共有するためのメッセージをお待ちしております。

おすすめ

転載: blog.csdn.net/wanghao112956/article/details/93166383