开发者社区> 问答> 正文

MySQL SELECT LIKE或REGEXP以在一条记录中匹配多个单词?mysql

领域table。name包含“ Stylus Photo 2100”并带有以下查询

SELECT name FROM table WHERE name LIKE '%Stylus 2100%' 我没有结果。我当然会搜寻

SELECT name FROM table WHERE name LIKE '%Photo 2100%' 如何通过搜索“ Stylus 2100”选择记录?

谢谢

展开
收起
保持可爱mmm 2020-05-17 12:00:44 573 0
1 条回答
写回答
取消 提交回答
  • useTimezone是较旧的解决方法。MySQL团队最近才重写了setTimestamp / getTimestamp代码,但是只有在您设置连接参数useLegacyDatetimeCode = false且使用的是最新版本的mysql JDBC连接器时,才能启用它。因此,例如:

    String url = "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false 如果下载mysql-connector源代码并查看setTimestamp,很容易看到发生了什么:

    如果使用旧日期时间代码= false,则调用newSetTimestampInternal(...)。然后,如果传递给newSetTimestampInternal的Calendar为NULL,则将日期对象格式化为数据库的时区:

    this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US); this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ()); timestampString = this.tsdf.format(x); 日历为空非常重要-因此请确保您使用的是:

    setTimestamp(int,Timestamp). ...不是setTimestamp(int,Timestamp,Calendar)。

    现在应该很清楚这是如何工作的。如果您使用java.util.Calendar在美国/洛杉矶(或您想要的任何时区)构造日期:2011年1月5日3:00 AM,并调用setTimestamp(1,myDate),那么它将使用您的日期,请使用SimpleDateFormat在数据库时区中对其进行格式化。因此,如果您的数据库位于America / New_York,它将构造要插入的字符串'2011-01-05 6:00:00'(因为NY比LA提前3小时)。

    要检索日期,请使用getTimestamp(int)(不带日历)。它将再次使用数据库时区来建立日期。

    注意:Web服务器时区现在完全不相关! 如果未将useLegacyDatetimecode设置为false,则使用Web服务器时区进行格式设置-增加很多混乱。

    注意:

    MySQL可能抱怨服务器时区模棱两可。例如,如果您的数据库设置为使用EST,则Java中可能有几个可能的EST时区,因此您可以通过确切地告诉它mysql-connector的数据库时区是什么来为mysql-connector澄清这一点:

    String url = "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York"; 如果抱怨,您只需要这样做。来源:stack overflow

    2020-05-17 12:02:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像