我看过有关Python和编码的其他问题,但还没有找到解决我问题的方法。这里是:
我有一个小脚本,试图比较2个文件列表:
文本文件中给出的列表,应该以UTF8编码(至少Notepad ++会这样检测到该列表)。
我建立的目录清单如下:
local = [f.encode('utf-8') for f in listdir(dir) ]
Run Code Online (Sandbox Code Playgroud)但是,对于某些字符,我没有得到相同的表示形式:在HEX编辑器中查看时,我发现在1中,字符é由给出,65 cc而在2中,字符由c3 a9... 给出。
我想要的是使它们具有相同的编码,无论它是什么。
这是针对 Firebird 2.5 的。
我有一个表 T,其索引由 2 列组成,例如 ColA 和 ColB。如果我正在做 :
SELECT * FROM T WHERE ColA=...,所以 WHERE 子句只在 A 列上,Firebird 会为列 ColB 设置默认值,以及索引的好处,还是根本不能使用这个索引?
一些上下文:我正在进行数据库升级。这是我所拥有的:
CREATE TABLE user(
newid BIGINT NOT NULL,
oldid BIGINT NOT NULL,
anotherCol INT);
CREATE INDEX idx ON user(oldid, anotherCol);
CREATE TABLE order(
RefUser BIGINT);
Run Code Online (Sandbox Code Playgroud)
order.RefUser 是 oldid,我需要将它们更改为 newid。我使用这个查询来做到这一点:
UPDATE order o SET o.refuser = (SELECT u.newid FROM user u WHERE u.oldId = o.refuser);
Run Code Online (Sandbox Code Playgroud)
此时,oldid 仍然是唯一的,但稍后将仅保证 (oldid, anotherCol) 的唯一性,因此索引,以及 newid 的创建。
用户表是几百万条记录,订单表是几千万条:这个查询需要一个多小时。我想看看如何改进它(不热衷于在这段时间内关闭关键服务)。