1

我收到错误

No data! (sqlJadual)

从这个查询

mssql_query("SELECT * 
             from tblstatusjadual 
             where idjadual like '1%' and 
                   tahun='2011' 
             order by idjadual") or die('No data! (sqlJadual)');

但是,当我将其更改为

mssql_query("SELECT idjadual,status 
             from tblstatusjadual 
             where idjadual like '1%' and 
             tahun='2011' 
             order by idjadual") or die('No data! (sqlJadual)');

它工作正常。

如果我只从 2 个字段中选择也没关系,但是当我想选择超过 15 个字段时,查询会变得冗长且令人困惑。

我的问题是 mssql 在他们的查询中不支持 select * 吗?

任何帮助,将不胜感激!

4

2 回答 2

0

这取决于列的数量及其类型。可能(例如)其中一种列类型是 BLOB 并且驱动程序确保它在行数据结构中具有 2GB 可用空间来保存它(我以前在一些写得不好的 JDBC 驱动程序中看到过这种情况)。

最好的检查方法是逐渐将其他列(除scheduleand year)添加到第二个查询中,直到它失败。这可能会告诉您错误的列,如果有的话。

另外,将您的die声明更改为:

die(mssql_get_last_message())

所以你可以希望看到失败消息是什么。

并且,根据您对此的回应:

仅 Unicode 排序规则中的 Unicode 数据或 ntext 数据无法使用 DB-Library(例如 ISQL)或 ODBC 版本 3.7 或更早版本发送到客户端。

看起来您的数据库和您用来访问它的库之间的功能不匹配。

由于 Unicode 通常被认为是一件好事,我会说坚持下去,看看是否有更高版本的 MSSQL(或底层 ODBC 驱动程序)可以处理它。

此页面还有一些建议可以解决您的问题:


当您收到此错误消息时:“无法使用 DB-Library(如 ISQL)或 ODBC 版本 3.7 或更早版本将仅 Unicode 排序规则中的 Unicode 数据或 ntext 数据发送到客户端。”

在 /etc/freetds/freetds.conf 添加这两行(最后两行):

[global]
;tds version = 4.2
tds version = 8.0
client charset = UTF-8

您也可以在 php.ini 中编辑“charset”(但如果您之前在 freetds.conf 中做过,则不需要):

; Specify client character set..
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
mssql.charset = "UTF-8"
于 2012-08-14T05:22:50.860 回答
0

我在这里提到我的评论作为答案,因为它对您有所帮助,并且下次有人访问/面临类似情况时,他/她可能会参考此内容(而不是扫描上述评论系列的整个字符串)。

如果您SELECT *对一个MSSQL表发出 a 并且您的表包含一个TEXT带有空白字符串的列,您要么

1) 将该列的数据类型更改为varchar
2) 将该列的值从空白字符串重置为NULL.

做这项SELECT *工作。

(另一方面,我建议您不要使用SELECT *,而只在查询中包含您真正需要的那些列。)

于 2012-08-14T16:50:20.217 回答