【问题标题】:CHAR(0) allows to insert values of all lengths in mysql [duplicate]CHAR(0)允许在mysql中插入所有长度的值[重复]
【发布时间】:2016-01-02 05:42:30
【问题描述】:

我正在使用 mysql。我对数据类型 char(0) 感到困惑。即使根据定义列长度为 0,它仍然允许添加更大长度的字符串,那么长度为零表示什么?

编辑:甚至不保留该值。查询时返回空字符串。

【问题讨论】:

  • 即使您可以指定任何长度,但除了null''(空字符串)之外,它不会保存任何内容。对我来说看起来非常好。
  • 它必须在插入时出现“数据太长”或类似的错误

标签: mysql sql database


【解决方案1】:

如果你想避免一些像这样令人困惑的行为,你需要在严格模式下配置 MySQL。我通常在我的 SQL 客户端中执行此操作,因此无论服务器设置如何,我都会获得一致的行为:

SET @@SESSION.sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO';

只看区别:

mysql> SET @@SESSION.sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO foo (bar) VALUES ('x');
ERROR 1406 (22001): Data too long for column 'bar' at row 1
mysql> SET @@SESSION.sql_mode=''; -- Older default
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO foo (bar) VALUES ('x');
Query OK, 1 row affected, 1 warning (0.05 sec)

mysql> SHOW WARNINGS;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'bar' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

【讨论】:

  • @Mjh 我基本上指的是 MySQL 最初设计的想法是默默地破坏用户数据是一项功能,但我无意点燃火焰,所以我很乐意编辑答案并更改术语。
  • 评论已删除,我也不想发火,我只是想知道你指的是什么。 +1,好答案,世界和平:)
猜你喜欢
  • 2017-08-19
  • 2021-09-08
  • 1970-01-01
  • 2019-02-02
  • 2013-01-17
  • 1970-01-01
  • 2012-02-03
  • 2022-07-19
  • 2021-07-07
相关资源
最近更新 更多