私信  •  关注

O. Jones

O. Jones 最近创建的主题
O. Jones 最近回复了
3 年前
回复了 O. Jones 创建的主题 » MySQL和PHP UTC时间在数字格式时不同

时区处理可能是xss的一大难题。

  • 1632383646是协调世界时07:54:06,欧洲中部时间09:54:06
  • 1632390846是09:54:06 UTC,11:54:06 CET

php的 time() 总是返回 UNIX timestamp

但是,php strtotime() 函数接受日期/时间字符串 2021-09-23 09:54:06 好像是在当地时间 并将其转换为UNIX时间戳。你的机器设置为CET(+02:00),所以 strtime() 减去两个小时得到时间戳,时间戳假定始终以UTC为单位。

在应用程序设计方面,使用MySQL进行所有时区处理可能是明智的。已经安排好了 remarkably well 为了那项任务。

  1. 始终使用时间戳数据类型。这样,所有存储的日期/时间值都将以UTC为单位。

  2. 如果你想全球化,让每个用户选择自己的时区偏好,用字符串 Europe/Amsterdam Asia/Kolkata . See this .

  3. 当您代表用户对数据库运行查询时,首先给出以下MySQL语句

    SET time_zone = ###user-preference-string###
    

  4. 运行数据库维护查询时,首先说

    SET time_zone = 'utc'
    

    您的输出将以UTC为单位。

3 年前
回复了 O. Jones 创建的主题 » 进口。使用加载数据在MySQL中创建csv文件

你能读懂你的书吗。是否将csv文件正确转换为Excel或LibreOffice Calc(或任何电子表格程序)?我想你可能可以。这意味着它的格式正确。

.csv文件包含表中每行数据的一行文本。这些 LOAD INFILE 指令告诉MySQL如何在中查找行和列。csv文件。

FIELDS TERMINATED BY ',' 表示每列数据以逗号结尾。注意你的第一行数据:

De Ruijterkade,,123400000001234,,1,105... 

第一列是街道名称。第二个是空的,第三个是空的 1 第四 105 等等。

ENCLOSED BY '"' 表示本身包含逗号(字段终止符)的数据列必须包含在 " 角色。例如,如果您的街道名称具有 De Ruijterkade, Kade 你的文件将包含

"De Ruijterkade, Kade",,123400000001234,,1,105... 

最后 LINES TERMINATED BY '\r\n' 表示文件中的每一行(表中的行)都以Windows样式结束 <return><linefeed> 角色对。

Akina正确地指出了文件。 https://dev.mysql.com/doc/refman/8.0/en/load-data.html#load-data-field-line-handling

3 年前
回复了 O. Jones 创建的主题 » 从mysql生成html选项列表的最有效方法是什么?

我会从表面上看你客户的要求,即使如果我不得不使用5000个元素的下拉菜单,我也会发疯。

你可以考虑使用 HTML5 datalist element 来改进一下这个用户体验。

从php的角度来看,生成这段代码的方式可能并不重要。然而,从MySQL的角度来看,使用 while loop——你的第一选择——更好。为什么?

  • 如果使用组_CONCAT()生成长字符串,则需要设置。读这个。 MySQL and GROUP_CONCAT() maximum length 一个聪明的开发人员,尤其是在面对一个奇怪的需求时,会保持它的简单。

  • 逐行处理中等大小的结果集可以减少php程序和MySQL服务器中的RAM需求。

  • 当你或其他人需要更好地利用这种用户体验时,阅读起来会更容易。

3 年前
回复了 O. Jones 创建的主题 » MySQL查询-待批好友/用户和好友之间的关系

你试过这个吗?它将在两个ID中的任何一个上连接。

...
LEFT JOIN g_users ON ( g_relationship.request_id = g_users.id OR
                       g_relationship.receiver_id = g_users.id )  
WHERE g_users.id = 4 
3 年前
回复了 O. Jones 创建的主题 » 使用MySQL workbench使用两个标准识别重复项

将您的查询用作子查询,并围绕它包装另一个查询。(从子查询生成查询是 结构化的 在里面 结构化查询语言 ).

像这样的东西可能有用。

SELECT Composer, SUM(tracks) duplicate_tracks
  FROM (SELECT Name, Composer, Count(*) tracks 
               FROM Track
              GROUP BY Name, Composer
             HAVING COUNT(*) > 1
       ) duptracks
 GROUP BY Composer
 ORDER BY COUNT(*) DESC;

它将您的查询当作一个表(实际上是一个虚拟表)使用,并在其上运行GROUP BY。要以这种方式使用查询,它需要在 COUNT(*) 我给它起了个名字 tracks .它还需要在子查询中输入名称。我曾经 duptracks 为此。

外部查询将composer的所有重复曲目与 SUM() ... GROUP BY Composer 然后命令他们首先向作曲家呈现重复最多的曲目。

但请注意,这对您的 Composer 列作为一个整体。它将使用 John, Paul, Ringo, George 就好像他们只是一个作曲家,而不是每个人的重复数。

6 年前
回复了 O. Jones 创建的主题 » 在mysql中为每月事件添加天数

你需要一个稍微不同的 ON SCHEDULE 短语。

 AT '2018-04-01 03:01' + INTERVAL 5 DAY EVERY MONTH

在每个月的第五天当地时间03:01开始您的活动。

03:01 是安排工作的好时机,因为它不会被标准时间/夏令时切换搞砸。

11 年前
回复了 O. Jones 创建的主题 » 查找包含给定坐标的圆的mysql查询

我必须把这件事做得很详细,所以我要和大家分享我的结果。这使用了 zip 表与 latitude longitude 桌子。它不依赖于谷歌地图,而是可以将其适配到包含LAT/LUN的任何表中。

SELECT zip, primary_city, 
       latitude, longitude, distance_in_mi
  FROM (
SELECT zip, primary_city, latitude, longitude,r,
       (3963.17 * ACOS(COS(RADIANS(latpoint)) 
                 * COS(RADIANS(latitude)) 
                 * COS(RADIANS(longpoint) - RADIANS(longitude)) 
                 + SIN(RADIANS(latpoint)) 
                 * SIN(RADIANS(latitude)))) AS distance_in_mi
 FROM zip
 JOIN (
        SELECT  42.81  AS latpoint,  -70.81 AS longpoint, 50.0 AS r
   ) AS p 
 WHERE latitude  
  BETWEEN latpoint  - (r / 69) 
      AND latpoint  + (r / 69)
   AND longitude 
  BETWEEN longpoint - (r / (69 * COS(RADIANS(latpoint))))
      AND longpoint + (r / (69 * COS(RADIANS(latpoint))))
  ) d
 WHERE distance_in_mi <= r
 ORDER BY distance_in_mi
 LIMIT 30

看看查询中间的这一行:

    SELECT  42.81  AS latpoint,  -70.81 AS longpoint, 50.0 AS r

这将搜索 拉链 距纬度/经度点42.81/-70.81 50.0英里内的表。当你将其构建到一个应用程序中时,你可以在其中放置自己的点和搜索半径。

如果你想以公里而不是英里为单位工作,那就换 69 111.045 变化 3963.17 6378.10 在查询中。

这是一份详细的书面报告。我希望它能帮助别人。 http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/

6 年前
回复了 O. Jones 创建的主题 » mysql workbench生成的sql代码中出现错误1064

埃德·科特雷尔是对的。这是mysql服务器版本和mysql工作台设置之间的版本不匹配。

  1. SELECT VERSION(); 让你的服务器告诉你它的版本。
  2. 在workbench中,编辑/preferences/modeling>mysql,并设置 默认目标MySQL版本 到您的服务器版本。

然后workbench将生成适合您实际使用的服务器的代码。

对于新用户来说,这个错误很可能发生;新下载的Workbench软件的默认设置是MySQL8,但是世界上很多服务器还没有在版本8上。

6 年前
回复了 O. Jones 创建的主题 » mysql使用什么文件系统?

mysql使用什么文件系统?

mysql访问方法代码(innodb、myisam、ariadb等)使用主机操作系统上主机卷的本机文件系统。Windows上的NTFS、U**X系统上的ext4fs等。有能力的平台端口使用各种I/O技术,包括内存映射、分散/聚集和普通读写系统调用,并与文件系统的日志记录功能集成。具体使用的技术取决于查询的类型、访问方法和缓存的状态。

提示: 不要担心性能问题,除非你的服务器运行在一个32位的486机器上,你可以在一个仓库里找到它(或者除非你有数百万的用户和数十亿行的数据)。