mysql - CHAR(0) 允许在 mysql 中插入所有长度的值

标签 mysql sql database

<分区>

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

编辑:该值甚至没有保留。在查询时它返回空字符串。

最佳答案

如果你想避免像这样的一些令人困惑的行为,你需要在严格模式下配置 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)

关于mysql - CHAR(0) 允许在 mysql 中插入所有长度的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32950773/

相关文章:

php - 如何在不重新安装的情况下修复wamp服务器?

MySQL根据另一个表的字段指定更新记录的字段

javascript - 关联不同表中数据的最简单、最有效的方法,无需关联

php - 一次按多个条件进行分组

sql - 如何将 SQL Server Management studio - "Execute Stored Procedure"用于用户定义的表类型?

mysql - 在MYSQL中创建组织数据库

mysql - 使用 group by 时显示与 group by 匹配相关的所有行数据

php - 在 Slim 框架中获取数据没有达到我的预期

sql - 如何重用 2 个相同子查询检索到的值?

python - 服务器启动后Django多个动态数据库