MySQL是否区分大小写?

MySQL这东西啊,得看情况。
操作系统、你咋设置,数据库名、表名、列名这些玩意儿,大小写敏感不敏感,得一个一个说。

先说数据库名。
Windows系统,一般不区分大小写。
比如你创建个数据库叫test_db,跟TEST_DB一样,Windows都当回事儿。
但Linux就不一样了,test_db和TEST_DB是两码事。
这个啊,有参数控制,叫lower_case_table_names。
0就是区分大小写,Linux默认就是。
1 呢,就是不管大小写,Windows默认就是。
2 呢,Linux下创建数据库时保留大小写,但用的时候不管。
比如Windows下创建TestDB,实际存的是testdb(如果lower_case_table_names=1 的话)。
用的时候,USE TestDB;还是能进。

再说表名。
这得看文件系统。
Linux文件系统一般区分大小写,Windows不区分。
但表名创建的时候,受文件系统影响。
查询的时候,如果lower_case_table_names=1 ,那不管大小写。
比如你创建个表MyTable,实际存的名字可能文件系统决定了,也可能参数决定了。
SELECT FROM mytable;如果lower_case_table_names=1 ,不管大小写,都能查到。
但如果你用lower_case_table_names=1 ,跨平台的时候可能会有问题。

列名和关键字呢。
列名啊,一般不区分大小写。
UserId和userid一样。
SQL关键字也是,SELECT和select一个样。
但有个例外,就是字符串比较。
比如WHERE name='Alice',这默认是区分大小写的。
除非你用COLLATE指定不敏感规则。
比如utf8 _general_ci中的ci,就是说不敏感。
比如SELECT UserId FROM users WHERE UserName='Alice';这列名不敏感,但字符串值敏感。
你要是写SELECT userid FROM USERS WHERE username COLLATE utf8 _general_ci='alice';,这就强制不敏感了。

变量和字符串比较呢。
系统变量不区分大小写。
比如SET @@autocommit=1 和SET @@AUTOCOMMIT=1 一个样。
但字符串值默认是区分大小写的,这跟字符集和排序规则有关。
比如SHOW VARIABLES LIKE 'lower_case_table_names';参数名不敏感。
SELECT 'Hello'='hello';这默认返回0,是区分大小写的。
除非你用COLLATE指定。

总的来说呢。
Windows默认不敏感,Linux默认敏感。
lower_case_table_names这个参数能统一行为,但得在初始化的时候设置。
最好命名统一,比如都用小写表名、列名。
跨平台开发时,显式设置lower_case_table_names。
字符串比较的时候,明确指定COLLATE,避免歧义。

可以写代码试一下。
比如测试表名敏感性,创建个表TempTable(id INT);,然后SELECT FROM temptable;,看看有没有报错。
测试字符串敏感性,SELECT 'MySQL'='mysql';默认返回0,区分大小写。
SELECT 'MySQL'='mysql' COLLATE utf8 _general_ci;返回1 ,不敏感。

这么一了解,就不会因为大小写出问题了。

请问mysql数据类型是否区分大小写?

MySQL数据类型不区分大小写。

关键词大小写无关。
INT和int效果一样。

表名和字段名默认不区分大小写。

字符串默认区分大小写。
比如'Hello'和'hello'不同。

用校对规则可改。
比如utf8 _general_ci不区分大小写。

文本搜索要考虑校对规则。

你自己掂量。