我试图在使用MySQL(5.1)之后熟悉Postgres(9.2),因为我被一些MySQL的陷阱所困扰.然而,在我与Postgres的前五分钟里,我碰到了其中一个陷阱,我确信每个人都会遇到它:
这对我来说并不算太大,因为有几个明显的解决方法:
但我想知道为什么.考虑到我想象这个设计决定导致了多少争用,我很惊讶我在互联网上找不到任何理由.有没有人有一个彻底的解释,或者最好是一些开发者宣言的链接,为什么Postgres是这样设计的?我很感兴趣.
有一个用于智能手机的RSA软令牌应用程序以及一个Windows桌面版本的应用程序。我收到了要与手机应用程序一起使用的QR码,但我想在计算机上使用它。RSA软令牌程序的计算机版本需要.sdtid文件。
电话应用程序的QR码以以下形式解码为URL:
http://127.0.0.1/securid/ctf?ctfData=RHVtbXkgRGF0YQ%3D%3D
Run Code Online (Sandbox Code Playgroud)
CTF(压缩令牌格式)似乎是URL编码的Base64数据,因此最后一部分的URL解码将产生:
RHVtbXkgRGF0YQ==
Run Code Online (Sandbox Code Playgroud)
而Base64解码将给出:
Dummy Data
Run Code Online (Sandbox Code Playgroud)
当我使用真实数据(机密数据)执行此操作时,我得到了某种二进制文件,Linux file命令将该二进制文件标识为“ DBase 3数据文件”,但这可能并不准确。它当然不会导入Windows程序。
有一个官方实用程序,可以将Windows .sdtid文件转换为这些CTF URL(软件令牌转换器),但是它仅朝该方向发展。我强烈怀疑转换的方向可能相反,但是其他所有人似乎都对将更多重要操作转移到智能手机上更感兴趣。
有谁知道如何将RSA软件电话令牌转换为Windows RSA软件令牌?
我有一个简单的报告发送框架基本上做了以下事情:它执行SELECT查询,它根据结果制作一些文本格式的表,它发送电子邮件,并执行UPDATE查询.
该系统是旧系统的概括,其中所有操作都是硬编码的.但是,在将我想要做的所有逻辑推入SELECT查询中时,我遇到了一个问题.
之前,我可以通过以下方式获取文本表的大部分信息:
SELECT Name, Address FROM Databas.Tabl WHERE Status='URGENT';
Run Code Online (Sandbox Code Playgroud)
然后,当我需要额外的电子邮件号码时,也可以:
SELECT COUNT(*) FROM Databas.Tabl WHERE Status='URGENT' AND TimeLogged='Noon';
Run Code Online (Sandbox Code Playgroud)
现在,我不再拥有多个SELECT查询的奢侈品.我想做的是:
SELECT Tabl.Name, Tabl.Address, COUNT(Results.UID) AS Totals
FROM Databas.Tabl
LEFT JOIN Databas.Tabl Results
ON Tabl.UID = Results.UID
AND Results.TimeLogged='Noon'
WHERE Status='URGENT';
Run Code Online (Sandbox Code Playgroud)
至少在我的脑海中,这是为了得到所有被选中的行的总数,并且还有一些条件.
但实际上,这给了我"1140 - 混合GROUP列,没有GROUP列,如果没有GROUP BY"则错误.问题是,我不想GROUP BY.我希望这个COUNT冗余地重复SELECT找到的TimeLogged ='Noon'的结果数.或者我想删除AND子句,并在SELECT语句的结果中包含SELECT语句找到的结果数.
GROUP BY不是答案,因为这会导致它只获取某些列中具有相同值的行的COUNT.而COUNT可能甚至不是解决这个问题的方法,尽管这是我想到的.FOUND_ROWS()不会这样做,因为它需要是辅助查询的一部分,我只得到一个(加上没有涉及LIMIT),并且ROW_COUNT()似乎不起作用,因为它是一个SELECT语句.
我可能完全从错误的角度接近它.但我想要做的是在一个查询中获取有关SELECT查询结果的COUNT类型信息,以及SELECT查询返回的所有其他信息.
===这是我到目前为止所得到的===
SELECT Tabl.Name, Tabl.Address, Results.Totals
FROM Databas.Tabl
LEFT JOIN (SELECT COUNT(*) AS Totals, 0 AS Bonus
FROM Databas.Tabl
WHERE TimeLogged='Noon'
GROUP BY NULL) Results
ON 0 = Results.Bonus
WHERE Status='URGENT'; …Run Code Online (Sandbox Code Playgroud) 我正在将我的 AUTO_INCREMENT PRIMARY KEY ID 列从 INT 更新为 BIGINT。我将 MySQL 5.0.82 版与 InnoDB 表一起使用。它们看起来像:
FactTable
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Path | varchar(64) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
AttemptTable
+---------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | …Run Code Online (Sandbox Code Playgroud) 我有很多类定义了一些Enum,我希望从用户输入的String中加载它们的值.所以我发现自己重复了这个方法:
public final class Status {
public static enum TYPE { Slow, Haste, Sleep, Stop, Stone, Invis, Rage,
Conf, Bleed, Weak, Dumb, Sil, Rot, Lev, Clumsy };
public static Set<Status.TYPE> typesFromString(String string) {
EnumSet<Status.TYPE> set = EnumSet.noneOf(Status.TYPE.class);
if (string == null)
return set;
String[] elements = string.split(",");
for (String element : elements) {
element = element.trim();
for (TYPE type : EnumSet.allOf(Status.TYPE.class)) {
if (type.toString().equalsIgnoreCase(element)) {
set.add(type);
break;
}
}
}
return set;
}
Run Code Online (Sandbox Code Playgroud)
也就是说,给定一个包含与枚举条目匹配的逗号分隔元素的字符串,返回用每个匹配填充的集合.
我很想把它变成通用的,所以我不需要维护它的十个不同的副本,但我不能弄清楚如何在返回一组枚举时使这个通用.我认为它看起来有点像下面的方法:
public static Set<[Enum Class Specified …Run Code Online (Sandbox Code Playgroud) mysql ×2
alter-table ×1
android ×1
enums ×1
foreign-keys ×1
generics ×1
indexing ×1
innodb ×1
java ×1
postgresql ×1
securid ×1
set ×1
sql ×1
token ×1
windows ×1