【问题标题】:MySQL Connector field() Auto-Conversion to Lasso Types?MySQL连接器字段()自动转换为套索类型?
【发布时间】:2013-11-06 01:35:00
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: lasso-lang


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      很容易找出 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 整数
      输入字符串
      街道字符串
      城市字符串
      状态字符串
      拉链空
      图像字节
      创建的字符串

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

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

      【讨论】:

        【解决方案3】:

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

        field('icanhaznull') == ''

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

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

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

        Testing a field or var against the empty string

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-04
          • 2011-07-08
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多