MySQL Tutorial/Data Types/Char Varchar

Материал из SQL эксперт
Перейти к: навигация, поиск

All CHAR and VARCHAR values in MySQL are compared without regard to any trailing spaces

mysql>
mysql> CREATE TABLE myTable (myname CHAR(10), yourname VARCHAR(10));
Query OK, 0 rows affected (0.03 sec)
mysql>
mysql> INSERT INTO myTable VALUES ("Monty ", "Monty ");
Query OK, 1 row affected (0.01 sec)
mysql>
mysql> SELECT myname = "Monty  ", yourname = "Monty  " FROM myTable;
+--------------------+----------------------+
| myname = "Monty  " | yourname = "Monty  " |
+--------------------+----------------------+
|                  1 |                    1 |
+--------------------+----------------------+
1 row in set (0.00 sec)
mysql>
mysql> drop table myTable;
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql>


CHAR and VARCHAR

VARCHAR is a variable length and the CHAR is not.

CHAR types are used for fixed lengths.

If you declare a CHAR(10), all values stored in this column will be 10 bytes long, even if it is only 3 characters long.

MySQL pads this value to fit the size that was declared.

10. 5. Char Varchar 10. 5. 1. CHAR and VARCHAR 10. 5. 2. <A href="/Tutorial/MySQL/0200__Data-Types/DifferencesbetweenCHARandVARCHAR.htm">Differences between CHAR and VARCHAR</a> 10. 5. 3. <A href="/Tutorial/MySQL/0200__Data-Types/SetcolumndefaultvalueforVARCHAR.htm">Set column default value for VARCHAR</a> 10. 5. 4. <A href="/Tutorial/MySQL/0200__Data-Types/VARCHARcolumnwithdefaultvalue.htm">VARCHAR column with default value</a> 10. 5. 5. <A href="/Tutorial/MySQL/0200__Data-Types/AllCHARandVARCHARvaluesinMySQLarecomparedwithoutregardtoanytrailingspaces.htm">All CHAR and VARCHAR values in MySQL are compared without regard to any trailing spaces</a> 10. 5. 6. <A href="/Tutorial/MySQL/0200__Data-Types/IfagivenvalueisstoredintotheCHAR4andVARCHAR4columnsthetrailingspacesofvaluesretrievedfromthecolumnsareremovedfromCHARcolumns.htm">If a given value is stored into the CHAR(4) and VARCHAR(4) columns, the trailing spaces of values retrieved from the columns are removed from CHAR columns.</a>

Differences between CHAR and VARCHAR

Value CHAR(4) Storage Required VARCHAR(4) Storage Required "" " " 4 bytes "" 1 byte "ab" "ab " 4 bytes "ab" 3 bytes "abcd" "abcd" 4 bytes "abcd" 5 bytes "abcdefgh" "abcd" 4 bytes "abcd" 5 bytes

If a given value is stored into the CHAR(4) and VARCHAR(4) columns, the trailing spaces of values retrieved from the columns are removed from CHAR columns.

mysql>
mysql> CREATE TABLE myTable (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> INSERT INTO myTable VALUES ("ab  ", "ab  ");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> SELECT CONCAT("(", v, ")"), CONCAT("(", c, ")") FROM myTable;
+---------------------+---------------------+
| CONCAT("(", v, ")") | CONCAT("(", c, ")") |
+---------------------+---------------------+
| (ab  )              | (ab)                |
+---------------------+---------------------+
1 row in set (0.00 sec)
mysql>
mysql> drop table myTable;
Query OK, 0 rows affected (0.00 sec)
mysql>


Set column default value for VARCHAR

mysql>
mysql> CREATE TABLE myTable
    -> (
    ->    ID SMALLINT UNSIGNED NOT NULL,
    ->    Year YEAR NOT NULL,
    ->    City VARCHAR(40) NOT NULL DEFAULT "Unknown"
    -> )
    -> ENGINE=INNODB;
Query OK, 0 rows affected (0.08 sec)
mysql>
mysql> desc myTable;
+-------+----------------------+------+-----+---------+-------+
| Field | Type                 | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| ID    | smallint(5) unsigned | NO   |     |         |       |
| Year  | year(4)              | NO   |     |         |       |
| City  | varchar(40)          | NO   |     | Unknown |       |
+-------+----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql>
mysql> drop table myTable;
Query OK, 0 rows affected (0.03 sec)


VARCHAR column with default value

mysql>
mysql>
mysql> CREATE TABLE myTable
    -> (
    ->    ID SMALLINT UNSIGNED NOT NULL,
    ->    City VARCHAR(40) NOT NULL DEFAULT "Unknown"
    -> );
Query OK, 0 rows affected (0.05 sec)
mysql>
mysql> desc myTable;
+-------+----------------------+------+-----+---------+-------+
| Field | Type                 | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| ID    | smallint(5) unsigned | NO   |     |         |       |
| City  | varchar(40)          | NO   |     | Unknown |       |
+-------+----------------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql>
mysql> drop table myTable;
Query OK, 0 rows affected (0.00 sec)
mysql>