mysql的事务四个特性以及事务的四个隔离级别

leetcode518.爬楼梯

  返回  

MySQL字符集大小写不敏感(Windows平台)整数类型(精确值)Integer、int、smallint、tinyint、mediumint、bigint(ERROR 1264 (22003))

2021/8/21 21:45:45 浏览:

在Windows平台,MySQL默认是大小写不敏感的,Linux平台是默认敏感的。

修改某张表的某个字段大小敏感

alter table 表名称 modify 列名称 varchar(6) collate utf8_bin;

Mysql中控制大小写敏感由参数lower_case_table_names控制 

mysql> show variables like '%case%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 1     |
+------------------------+-------+

lower_case_file_system

此变量描述数据目录所在的文件系统上文件名的区分大小写。 OFF表示区分大小写,ON表示不区分大小写。此变量是只读的,因为它反映了文件系统属性并设置它对文件系统没有影响。

lower_case_table_system 

该参数为静态,可设置为0、1、2。

意义
0表和数据库名称使用CREATE TABLE or CREATE DATABASE 语句中指定的字母大小写存储在磁盘上。名称比较区分大小写。如果你有不区分大小写的文件名(如Windows或Mac系统)的系统上运行MySQL这个变量设置为0。如果--lower-case-table-names=0 在不区分大小写的文件系统上将此变量默认为 0 ,MyISAM使用不同的字母访问 表名,则可能会导致索引损坏
1表名以小写形式存储在磁盘上,名称比较不区分大小写。MySQL 在存储和查找时将所有表名转换为小写。此行为也适用于数据库名称和表别名。
2表和数据库名称使用 CREATE TABLE or CREATE DATABASE 语句中指定的字母存储在磁盘上,但 MySQL 在查找时将它们转换为小写。名称比较不区分大小写。这仅适用于不区分大小写的文件系统! InnoDB表名和视图名以小写形式存储,如 lower_case_table_names=1.

 If you are using InnoDB tables, you should set this variable to 1 on all platforms to force names to be converted to lowercase.

在 INFORMATION_SCHEMA 搜索中使用排序规则

表中的字符串列INFORMATION_SCHEMA的排序规则为utf8_general_ci,不区分大小写。但是,对于对应于文件系统中表示的对象的值,例如数据库和表,INFORMATION_SCHEMA字符串列中的搜索可以区分大小写或不区分大小写,具体取决于底层文件系统的特性和lower_case_table_names 系统变量。例如,如果文件系统区分大小写,则搜索可能区分大小写。本节描述了这种行为以及如何在必要时修改它;

假设查询在该SCHEMATA.SCHEMA_NAME列中 搜索 test数据库。在 Linux 上,文件系统区分大小写,因此 SCHEMATA.SCHEMA_NAME与 'test'匹配的比较,但与'TEST'不进行比较 :

mysql> SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
       WHERE SCHEMA_NAME = 'test';
+-------------+
| SCHEMA_NAME |
+-------------+
| test        |
+-------------+

mysql> SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
       WHERE SCHEMA_NAME = 'TEST';
Empty set (0.00 sec)

 不区分大小写时,比较时匹配'test'和 'TEST'

mysql> SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
       WHERE SCHEMA_NAME = 'test';
+-------------+
| SCHEMA_NAME |
+-------------+
| test        |
+-------------+

mysql> SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
       WHERE SCHEMA_NAME = 'TEST';
+-------------+
| SCHEMA_NAME |
+-------------+
| TEST        |
+-------------+

要执行不区分大小写的搜索,请一起使用 COLLATE、INFORMATION_SCHEMA和列名(SCHEMA_NAME COLLATE utf8_general_ci)

mysql> SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
       WHERE SCHEMA_NAME COLLATE utf8_general_ci = 'test';
+-------------+
| SCHEMA_NAME |
+-------------+
| test        |
+-------------+

mysql> SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
       WHERE SCHEMA_NAME COLLATE utf8_general_ci = 'TEST';
+-------------+
| SCHEMA_NAME |
+-------------+
| test        |
+-------------+

整数类型(精确值)——INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT

类型存储(字节)有符号的最小值最小值无符号最大值有符号最大值无符号
tinyint1-1280127255
smallint2-3276803276765535
mediumint3-83886080838860716777215
int4-2147483648021474836474294967295
bigint8-2^{63}02^{63}-12^{64}-1

 创建表时将表的整数数值列声明为无符号整数

CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_name` varchar(20) NOT NULL COMMENT '用户名',
`password` varchar(20) NOT NULL COMMENT '密码',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`salary` smallint(5) UNSIGNED DEFAULT 2000 COMMENT '月薪上限65535',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

超出数值类型错误

 ERROR 1264 (22003): Out of range value for column 'salary’at row 1 

修改已创建表的数值字段为无符号整数,如655635限制

alter table 表名称 modify 列名称 smallint(5) unsigned;

 

 

INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `salary`,`email`) VALUES('1', 'zhangsan', '123456', '张三', '18',65536, 'test1@itcast.cn');

 

 

 

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号