00 簡単なレビュー
確認したい:
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> SELECT username from tb_user where username = 'user';
+----------+
| username |
+----------+
| user |
| User |
| USER |
+----------+
3 rows in set</pre>
この例を通じて簡単に説明すると、フィールドの内容はデフォルトで大文字と小文字が区別されません。
02 解決策
mysql の
BINARY キーワードを使用して、大文字と小文字を区別して検索します。
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 概要
たとえば、次の表に示す 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 サイトの他の関連記事を参照してください。