我知道某些字段没有默认值。
我一直在使用MySQL 5.5.28,每次插入时它都会工作,而不指定该字段的值。该字段为TINYINT,默认情况下,在创建表时不指定任何值,也不声明默认值,在INSERT语句期间将在该字段中插入值0。
但是,在更新到MySQL 5.5.30之后,查询不再工作,返回的字段没有默认值。
我一直在查看changelogs,但是没有发现关于Integer的默认值发生了变化的任何线索。
MySQL 5.5.29:
MySQL 5.5.30:
测试查询:MyTable有字段MyField1和MyField2
INSERT INTO MyTable(MyField2)VALUES
我刚刚注意到,由于某种原因,phpMyAdmin在其生成的SQL查询中似乎总是使用数字字符串值而不是整数值(即'5‘而不是5)来将数据写入MySQL数据库中的整数字段,而我甚至不知道这是有效的SQL。
这让我很好奇,所以我自己做了一些后续实验,并且可以确认这确实是允许的,即使在DDL查询中也是这样:
ALTER TABLE MyTable ALTER COLUMN MyIntField SET DEFAULT '5'
(不用说,"MyIntField“是"int”类型)
以及在普通的插入和更新查询中,例如:
INSERT INTO MyTable (My
我正在与mysql2一起使用NodeJS库。我的本地机器和服务器上有相同的代码和数据库结构。当我上传一张照片到“照片”表,在我的本地机器上,它的工作很好。当我使用服务器时,我会得到以下错误:
{错误:数据太长,无法在第1行的第1行、(/srv/project/server/node_modules/mysql2/lib/packets/packet.js:716:13) at Query.Command.execute、(/srv/project/server/node_modules/mysql2/lib/commands/command.js:28:22) at Connection.ha
我有两个MySQL数据库实例,比方说: TST和DEV。
TST:
mysql --version
mysql Ver 14.14 Distrib 5.6.40, for Linux (x86_64) using EditLine wrapper
发展:
mysql --version
mysql Ver 14.14 Distrib 5.6.41, for Linux (x86_64) using EditLine wrapper
在这两种环境中几乎相同的版本。
两个实例上的数据库具有相同的架构和相同的数据。
有问题的表的结构如下:
CREATE TABLE `searchItem`
在MySQL上,如果我运行查询
SELECT * FROM table WHERE id = '1blah'
如果有一条记录的ID为1,则查询实际上将返回该记录。我通过Workbench和PHP/Doctrine执行查询,并得到相同的结果。
为什么MySQL要这么做?这里有没有我遗漏的更通用的数据库概念?语言/客户端在这方面有什么作用吗?
最后,PostgreSQL和甲骨文的表现如何?
目前,我有一个用PHP编写的更新逻辑,它可以更新MySQL数据库中的多个表。每当某个PHP-脚本被执行时,更新逻辑检查数据库是否是最新的(基于保存在其他地方的版本标志),如果不是,则应用所有必要的更新。
更新逻辑的一部分应该为特定的表列添加索引:
if ($database_version < 1337) {
if (!get_results("SHOW INDEX FROM my_table WHERE Key_name = 'my_key';")) {
query("ALTER TABLE my_table ADD IN
为什么第一次插入是针对table2的。请注意,table2.col_1不为NULL。它不为col_1插入NULL,但神秘地将NULL值转换为空字符串。我使用的是MySQL版本5.5.28。谢谢
mysql> DROP TABLE IF EXISTS table1, table2;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE IF NOT EXISTS table1 (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
-> col_1