我有一张桌子
ID INT(16)
StateName VARCHAR(50)
Details MEDIUMTEXT
当我通过链接服务器连接进行插入时:
Insert Into MySQL...tblState (ID, StateName, Details) Values (1,'Alabama','Test')
行 ID 设置为 0 而不是 1。
如果我翻转表结构以将 Details 放在 Statename 之前,这样 MEDIUMTEXT 就不是最后一列,并执行相同的插入语句。
Insert Into MySQL...tblState (ID, Details, StateName) Values (1,'Test','Alabama')
然后插入工作就像它应该做的那样。
这是一个已知的错误,还是我需要更改一个设置来解决这个问题?
我正在使用 MySQL ODBC 5.1 驱动程序
编辑:如果这对任何人都有帮助,这是我所做的测试结果。
在 phpmyadmin 中:
CREATE TABLE `tblState` (
`StateID` int(11) NOT NULL,
`State` varchar(50) NOT NULL,
`Details` mediumtext NOT NULL,
PRIMARY KEY (`StateID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE `tblState2` (
`StateID` int(11) NOT NULL,
`Details` mediumtext NOT NULL,
`State` varchar(50) NOT NULL,
PRIMARY KEY (`StateID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
从链接服务器上的 SQL Server:
insert into mysql...tblState(StateID,State,Details) values (1,'alabama','test1')
(1 row(s) affected)
select * from mysql...tblState
StateID State Details
----------- -------------------- --------------------
0 alabama test1
(1 row(s) affected)
insert into mysql...tblState2(StateID,Details,State) values (1,'test2','alabama' )
(1 row(s) affected)
select * from mysql...tblState2
StateID Details State
----------- -------------------- --------------------
1 test2 alabama
(1 row(s) affected)
我会冒险说某处可能存在错误 - 特别是考虑到
mediumtext
数据类型。这是我做的一些工作,显然还有一些额外的测试可以运行。这是一个 SQLFiddle供您参考。DDL
DML
呈现:
尽管
呈现:
最后,
按表 1 的顺序呈现表 2 的输出(如预期的那样):
现在,说了这么多,这已经在最新版本(MySQL 5.5)的 MySQL 服务器上直接(而不是通过链接)执行。也许您可以通过 phpMyAdmin 在您的服务器上直接运行小提琴的内容。这可能有助于我们了解您的 MySQL 版本是否存在问题。
您会注意到 tblState3 保留了有问题的表的原始顺序,同时改变了插入的顺序,只是为了给实验增加一点鲁棒性。
是无效的语法。使用
dbname.tblState
, 或