Int
Integer data (all numbers) from -2^31 (-2,147,483,648) to 2^31–1 (2,147,483,647). The storage size is 4 bytes. The SQL-92 synonym for int is integer
varchar
Length is 0-255 characters OH
What is the meaning of the numbers following the int in the MySQL field? What is the significance of the figures after varchar?
| The code is as follows |
Copy Code |
Mysql> CREATE TABLE T (a int (1)); Query OK, 0 rows affected (0.10 sec) Mysql> INSERT into T values (123); Query OK, 1 row affected (0.02 sec) Mysql> INSERT into T values (12345678); Query OK, 1 row affected (0.03 sec) Mysql> select * from T; +----------+ | A | +----------+ | 123 | | 12345678 | +----------+ |
Visible, int (1) does not represent a byte.
If the longer number will not be the error?
| The code is as follows |
Copy Code |
Mysql> INSERT into T values (1234567812345678); ERROR 1264 (22003): Out of Range value for column ' A ' in row 1 Mysql> INSERT into T values (2147483648); ERROR 1264 (22003): Out of Range value for column ' A ' in row 1 Mysql> INSERT into T values (2147483647); Query OK, 1 row affected (0.03 sec)
|
The maximum int-type length is 2^31-1, plus a signed number, which should be four bytes in length.
| The code is as follows |
Copy Code |
| Mysql> ALTER TABLE t add column B int; Query OK, 5 rows affected (0.25 sec) Mysql> insert INTO T values (2147483647,2147483648); ERROR 1264 (22003): Out of Range value for column ' B ' in row 1 mysql> insert into T values (2147483647,2147483647); br> Query OK, 1 row affected (0.03 sec) Mysql> select * from T; +------------+------------+ | A | B | +------------+------------+ | 123 | NULL | | 12345678 | NULL | | 65536 | NULL | | 1073741824 | NULL | | 2147483647 | NULL | | 2147483647 | 2147483647 | +------------+------------+ 6 rows in Set (0.00 sec) |
It is clear whether the int has nothing to do with the number and the maximum value.
Then look at the numbers after char and varchar.
| The code is as follows |
Copy Code |
| Mysql> ALTER TABLE t add column C char (2); Query OK, 6 rows affected (0.17 sec) Records:6 duplicates:0 warnings:0 Mysql> ALTER TABLE t add column D varchar (2); Query OK, 6 rows affected (0.17 sec) Records:6 duplicates:0 warnings:0 Mysql> desc t; +-------+------------+------+-----+---------+-------+ | Field | type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | a | int (1) | yes | | null | | | b | int (one) | yes | | null | | | c | char (2) | yes | | null | | | d | varchar (2) | yes | | null | | +-------+------------+------+-----+---------+-------+ 4 rows in Set (0.01 sec) Mysql> INSERT into t values (2147483647,2147483647, ' abc ', ' abc '); ERROR 1406 (22001): Data too long for column ' C ' at row 1 Mysql> INSERT into t values (2147483647,2147483647, ' ab ', ' abc '); ERROR 1406 (22001): Data too long for column ' d ' at row 1 Mysql> INSERT into t values (2147483647,2147483647, ' ab ', ' ab '); Query OK, 1 row affected (0.02 sec) |
The number that is visible after char and varchar is the storage length.
So for Chinese characters, will there be more than the number of bytes and overflow the problem?
| The code is as follows |
Copy Code |
| Mysql> INSERT into t values (2147483647,2147483647, ' ab ', ' Medium '); Query OK, 1 row affected (0.02 sec) Mysql> select * from T; +------------+------------+------+------+ | a | b | c | d | +------------+------------+------+------+ | 123 | NULL | NULL | NULL | | 12345678 | NULL | NULL | NULL | | 65536 | NULL | NULL | NULL | | 1073741824 | NULL | NULL | NULL | | 2147483647 | NULL | NULL | NULL | | 2147483647 | 2147483647 | NULL | NULL | | 2147483647 | 2147483647 | ab | ab | | 2147483647 | 2147483647 | ab | +------------+------------+------+------+ 8 rows in Set (0.00 sec) |
The Chinese text is also contained within 2 words.
| The code is as follows |
Copy Code |
| Mysql> INSERT into t values (2147483647,2147483647, ' ab ', ' Medium a '); ERROR 1406 (22001): Data too long for column ' d ' at row 1 Mysql> INSERT into t values (2147483647,2147483647, ' ab ', '? Series F '); Query OK, 1 row affected (0.05 sec) Mysql> select * from T; +------------+------------+------+------+ | A | B | C | D | +------------+------------+------+------+ | 123 | NULL | NULL | NULL | | 12345678 | NULL | NULL | NULL | | 65536 | NULL | NULL | NULL | | 1073741824 | NULL | NULL | NULL | | 2147483647 | NULL | NULL | NULL | | 2147483647 | 2147483647 | NULL | NULL | | 2147483647 | 2147483647 | AB | AB | | 2147483647 | 2147483647 | AB | The middle of the process | | 2147483647 | 2147483647 | AB |? f | +------------+------------+------+------+ 9 rows in Set (0.01 sec) |
No more than one byte.
Look at the character encoding. MySQL character encoding consists of server, database, table, field level four.
MySQL Settings under Windows:
| The code is as follows |
Copy Code |
Mysql> Show variables like "character%"; +--------------------------+--------------------------+ | variable_name | Value | +--------------------------+--------------------------+ | character_set_client | GBK | | character_set_connection | GBK | | Character_set_database | UTF8 | | Character_set_filesystem | binary | | Character_set_results | GBK | | Character_set_server | UTF8 | | Character_set_system | UTF8 | | Character_sets_dir | D:mysqlsharecharsets | +--------------------------+--------------------------+ 8 rows in Set (0.00 sec) Mysql> Show create TABLE t; T | CREATE TABLE ' t ' ( ' A ' int (1) DEFAULT NULL, ' B ' int (one) DEFAULT NULL, ' C ' char (2) DEFAULT NULL, ' d ' varchar (2) DEFAULT NULL Engine=innodb DEFAULT Charset=utf8 |
Linux under CentOS settings:
| The code is as follows |
Copy Code |
Mysql> Show variables like "character%"; +--------------------------+----------------------------+ | variable_name | Value | +--------------------------+----------------------------+ | character_set_client | UTF8 | | character_set_connection | UTF8 | | Character_set_database | UTF8 | | Character_set_filesystem | binary | | Character_set_results | UTF8 | | Character_set_server | UTF8 | | Character_set_system | UTF8 | | Character_sets_dir | /opt/mysql/share/charsets/| +--------------------------+----------------------------+ 8 rows in Set (0.00 sec) Mysql> show full fields from T; Mysql> Show create DATABASE test; CREATE DATABASE ' test '/*!40100 DEFAULT CHARACTER SET UTF8 * * |
Character encoding is UTF8,
Therefore, for UTF8 characters, the numbers behind varchar, whether in Chinese or English, indicate the corresponding number of words, do not worry about truncation.