1

在带有 MySQL 连接器的 Lasso 8 中,该field()方法似乎总是返回字符串类型,而不管列中的数据是什么,或者列的数据类型如何。异常可能是 BLOB 列,它可能返回了字节类型。(我暂时不记得了。)

在 Lasso 9 中,我看到该field()方法返回整数列的整数类型。这导致我测试的条件出现一些问题,'1'而不是1.

Lasso 真的使用 MySQL 数据类型,还是 Lasso 只是解释结果?

是否有关于将哪些列类型转换为哪些 Lasso 数据类型的文档?

4

3 回答 3

1

Lasso 使用 MySQL 提供的有关列类型的信息来将数据作为相应的 Lasso 类型返回。不确定下面的所有机制。Lasso 8 可能对整数做了同样的事情,但 Lasso 8 还允许您将整数和字符串与整数值进行比较。(事实上​​,Lasso 8 甚至允许array->get('1')- 没错,索引的字符串!)。

我不知道有关哪些字段是什么的任何文档。有趣的是,我可以告诉你,虽然 MySQL 十进制和浮点字段被视为套索小数,但 MySQL 双精度不是。(我也不相信 MySQL 日期(时间)字段会作为套索日期出现,尽管那会很棒。)

于 2013-11-06T01:46:44.113 回答
0

此外,NULL 在 9 中返回为 NULL,而在 8 和更早版本中它是空字符串。注意比较:

field('icanhaznull') == ''

如果该字段包含 NULL 值,则上述计算结果为 8 中的 TRUE,以及 9 中的 FALSE。

这可能意味着更改在 NOT NULL 和 not 之间切换的列的架构。或者您可能更喜欢将字段转换为字符串:

string(field('icanhaznull')) == ''

针对空字符串测试字段或 var

于 2013-11-06T03:34:20.667 回答
0

很容易找出 Lasso 报告的列类型。
有一个看起来像这样的表:

CREATE TABLE `addressb` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `type` enum('commercial','residential') COLLATE utf8_swedish_ci DEFAULT NULL,
 `street` varchar(50) COLLATE utf8_swedish_ci NOT NULL DEFAULT NULL,
 `city` varchar(25) COLLATE utf8_swedish_ci NOT NULL DEFAULT NULL,
 `state` char(2) COLLATE utf8_swedish_ci NOT NULL DEFAULT NULL,
 `zip` char(10) COLLATE utf8_swedish_ci NOT NULL DEFAULT NULL,
 `image` blob,
 `created` datetime DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci;

您可以像这样获取报告的列类型:

inline(-database = 'testdb', -sql = "SELECT * FROM address") => {^
    with col in column_names do {^
        column(#col) -> type
        '<br />'
    ^}
^}

结果:
id integer
type string
street string
city string
state string
zip null
image bytes
created string

如您所见,除整数和 blob 字段外,所有内容都报告为字符串。加上此记录中恰好包含 NULL 并被报告为 NULL 的 zip 字段。

在进行比较时,确保将苹果与苹果进行比较总是一个好主意。也就是说,确保您正在比较相同类型的值。另外,为了检查是否有内容,我总是选择大小。
string(column('zip')) -> size > 0 ?

于 2013-11-06T07:47:58.753 回答