MySQL char字符长度(length()方法查看)和char(10)指定的长度不一致

MySQL char字符长度(length()方法查看)和char(10)指定的长度不一致

建表(utf8和ascii的2张表)

mysql> create table zyl_tmp_20210701_utf8(City CHAR(10), Street VARCHAR(10)) CHARSET=utf8;
Query OK, 0 rows affected (0.15 sec)

mysql> create table zyl_tmp_20210701_ascii(City CHAR(10), Street VARCHAR(10)) CHARSET=ascii;
Query OK, 0 rows affected (0.11 sec)

查看建表语句

mysql> show create table zyl_tmp_20210701_ascii;
+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| Table                  | Create Table                                                                                                                                      |
+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| zyl_tmp_20210701_ascii | CREATE TABLE `zyl_tmp_20210701_ascii` (
  `City` char(10) DEFAULT NULL,
  `Street` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=ascii |
+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table zyl_tmp_20210701_utf8;
+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Table                 | Create Table                                                                                                                                    |
+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| zyl_tmp_20210701_utf8 | CREATE TABLE `zyl_tmp_20210701_utf8` (
  `City` char(10) DEFAULT NULL,
  `Street` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

插入数据

mysql> INSERT INTO zyl_tmp_20210701_utf8 values('Pune', 'Oxford');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO zyl_tmp_20210701_ascii values('Pune', 'Oxford');
Query OK, 1 row affected (0.00 sec)

查看数据

mysql> select * from zyl_tmp_20210701_ascii;
+------+--------+
| City | Street |
+------+--------+
| Pune | Oxford |
+------+--------+
1 row in set (0.00 sec)

mysql> select * from zyl_tmp_20210701_utf8;
+------+--------+
| City | Street |
+------+--------+
| Pune | Oxford |
+------+--------+
1 row in set (0.00 sec)

mysql> select concat("'", City, "'") from zyl_tmp_20210701_utf8;
+------------------------+
| concat("'", City, "'") |
+------------------------+
| 'Pune'                 |
+------------------------+
1 row in set (0.00 sec)

查询长度

mysql> SELECT LENGTH(City), LENGTH(Street) FROM zyl_tmp_20210701_utf8;
+--------------+----------------+
| LENGTH(City) | LENGTH(Street) |
+--------------+----------------+
|            4 |              6 |
+--------------+----------------+
1 row in set (0.02 sec)

mysql> SELECT LENGTH(City), LENGTH(Street) FROM zyl_tmp_20210701_ascii;
+--------------+----------------+
| LENGTH(City) | LENGTH(Street) |
+--------------+----------------+
|            4 |              6 |
+--------------+----------------+
1 row in set (0.00 sec)

插入后缀为空字符串的数据

mysql> INSERT INTO zyl_tmp_20210701_ascii values('Xune   ', 'Oxford   ');
Query OK, 1 row affected (0.00 sec)

查询数据

mysql> select concat("'", City, "'") from zyl_tmp_20210701_utf8;
+------------------------+
| concat("'", City, "'") |
+------------------------+
| 'Pune'                 |
+------------------------+
1 row in set (0.00 sec)

mysql> select concat("'", City, "'") from zyl_tmp_20210701_ascii;
+------------------------+
| concat("'", City, "'") |
+------------------------+
| 'Pune'                 |
| 'Xune'                 |
+------------------------+
2 rows in set (0.00 sec)

查询长度

mysql> SELECT LENGTH(City), LENGTH(Street) FROM zyl_tmp_20210701_ascii;
+--------------+----------------+
| LENGTH(City) | LENGTH(Street) |
+--------------+----------------+
|            4 |              6 |
|            4 |              9 |
+--------------+----------------+
2 rows in set (0.00 sec)

mysql> SELECT LENGTH(City), LENGTH(Street), CHAR_LENGTH(City), CHAR_LENGTH(Street) FROM zyl_tmp_20210701_ascii;
+--------------+----------------+-------------------+---------------------+
| LENGTH(City) | LENGTH(Street) | CHAR_LENGTH(City) | CHAR_LENGTH(Street) |
+--------------+----------------+-------------------+---------------------+
|            4 |              6 |                 4 |                   6 |
|            4 |              9 |                 4 |                   9 |
+--------------+----------------+-------------------+---------------------+
2 rows in set (0.00 sec)

mysql> SELECT LENGTH(City), LENGTH(Street), CHAR_LENGTH(City), CHAR_LENGTH(Street) FROM zyl_tmp_20210701_utf8;
+--------------+----------------+-------------------+---------------------+
| LENGTH(City) | LENGTH(Street) | CHAR_LENGTH(City) | CHAR_LENGTH(Street) |
+--------------+----------------+-------------------+---------------------+
|            4 |              6 |                 4 |                   6 |
+--------------+----------------+-------------------+---------------------+
1 row in set (0.00 sec)

总结:

“CHAR检索时会从列中删除尾随空格。” CHAR后面有空格的话(char(10)类型存入‘abc’、‘abc ’后面都会有7个空格),实际存储的 和 查询出的不一样。

参考:

https://dev.mysql.com/doc/refman/5.6/en/char.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值