在带有 MySQL 连接器的 Lasso 8 中,该field()
方法似乎总是返回字符串类型,而不管列中的数据是什么,或者列的数据类型如何。异常可能是 BLOB 列,它可能返回了字节类型。(我暂时不记得了。)
在 Lasso 9 中,我看到该field()
方法返回整数列的整数类型。这导致我测试的条件出现一些问题,'1'
而不是1
.
Lasso 真的使用 MySQL 数据类型,还是 Lasso 只是解释结果?
是否有关于将哪些列类型转换为哪些 Lasso 数据类型的文档?
在带有 MySQL 连接器的 Lasso 8 中,该field()
方法似乎总是返回字符串类型,而不管列中的数据是什么,或者列的数据类型如何。异常可能是 BLOB 列,它可能返回了字节类型。(我暂时不记得了。)
在 Lasso 9 中,我看到该field()
方法返回整数列的整数类型。这导致我测试的条件出现一些问题,'1'
而不是1
.
Lasso 真的使用 MySQL 数据类型,还是 Lasso 只是解释结果?
是否有关于将哪些列类型转换为哪些 Lasso 数据类型的文档?
Lasso 使用 MySQL 提供的有关列类型的信息来将数据作为相应的 Lasso 类型返回。不确定下面的所有机制。Lasso 8 可能对整数做了同样的事情,但 Lasso 8 还允许您将整数和字符串与整数值进行比较。(事实上,Lasso 8 甚至允许array->get('1')
- 没错,索引的字符串!)。
我不知道有关哪些字段是什么的任何文档。有趣的是,我可以告诉你,虽然 MySQL 十进制和浮点字段被视为套索小数,但 MySQL 双精度不是。(我也不相信 MySQL 日期(时间)字段会作为套索日期出现,尽管那会很棒。)
此外,NULL 在 9 中返回为 NULL,而在 8 和更早版本中它是空字符串。注意比较:
field('icanhaznull') == ''
如果该字段包含 NULL 值,则上述计算结果为 8 中的 TRUE,以及 9 中的 FALSE。
这可能意味着更改在 NOT NULL 和 not 之间切换的列的架构。或者您可能更喜欢将字段转换为字符串:
string(field('icanhaznull')) == ''
很容易找出 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 ?