我不明白为什么
SELECT UUID();
Run Code Online (Sandbox Code Playgroud)
返回类似于:
3f06af63-a93c-11e4-9797-00505690773f
Run Code Online (Sandbox Code Playgroud)
但是如果我将它插入二进制(16)字段(UUID()函数)并使用例如BEFORE INSERT触发器并运行select,它将返回如下内容:
0782ef48-a439-11
Run Code Online (Sandbox Code Playgroud)
请注意,这两个UUID不是相同的数据.
我意识到二进制文件和一个UUID字符串看起来不一样,但是所选数据不应该只有那么长吗?否则,它怎么可能同样具有独特性呢?
将它存储为char(36)更好吗?我只需要它是唯一的,以防止重复插入.它永远不会被选中或用于连接.
编辑:
在触发之前会是这样的:
BEGIN
if NEW.UUID IS NULL THEN
NEW.UUID = UUID();
END IF
END
Run Code Online (Sandbox Code Playgroud) 我想知道在对任何列定义为UNIQUE的表执行INSERT之前是否运行了隐式SELECT.我在INSERT的文档中找不到任何相关内容.
我问了一些似乎没有人能够回答的其他问题 - 也许是因为我没有正确解释自己 - 与上述问题有关.
如果我理解正确,那么我认为以下情况属实:
情况1:
你有一个10亿行的表.每行都有一个唯一的UUID列.如果执行插入,服务器必须执行某种隐式操作 SELECT COUNT(*) FROM table WHERE UUID = [new uuid]并确定计数是0还是1.正确吗?
案例2:
你有一个10亿行的表.每行都有一个由DATE和UUID组成的复合唯一键.如果执行插入,服务器必须执行某种隐式操作 SELECT COUNT(*) FROM table WHERE DATE = [date] AND UUID = [new uuid]并检查计数是0还是1.是吗?
我使用了隐含这个词,因为在某个时刻,在某个过程中,服务器必须检查该值.如果不是这样,它就要求物理定律规定不能存在两个相同的行 - 而且就我所知,物理学在某些地方写下的数字的唯一性时,不会发挥重要作用,二进制,计算机中的磁盘.
让我们假设您的10亿行在2,000个不同日期均匀分布.这不意味着案例2会更快地执行插入,因为它可以查找分割成日期的UUID吗?如果没有,那么将案例1用于插入速度会更好 - 在这种情况下,为什么?
这个问题是理论上的,所以在这种情况下不要考虑常规的SELECT性能.主键不是UUID + DATE索引.
作为对评论的回应:在我的案例中,UUID的设计仅仅是为了避免由于连接错误而导致的重复条目.由于您不能两次为不同的日期创建相同的条目(逻辑上不是新条目),因此UUID不需要全局唯一 - 它只需要对每个日期都是唯一的.这就是为什么我可以允许它成为复合键的一部分.
我最近做了一些修改Assets.xcassets,这导致了XCode的绝对混乱.我最终Failed to render and update auto layout status for *MyViewController* (6jf-cd-DYU) dlopen (AFramework.framework, 1): no suitable image found. Did find: Aframework.framwork: required code signature missing for 'Aframework.framework'遇到了这种类型的多个错误:.storyboard和.xib文件.
Aframework是我作为依赖项的多个Pod框架的占位符.在修改xcassets之前,这些工作正常.
我尝试了我能找到的与此相关的所有内容,但我无处可去:清理派生数据,运行清理/构建,删除所有XCode缓存文件夹,完全重新安装XCode,刷新所有视图等.它编译并运行正常,一切正常应用程序(没有图像或资源丢失),但我的所有故事板都是空白的(全白),这使得它很难工作.
我也尝试过pod deintegrate,删除xcworkspace-file并重新安装pod(因为错误指向Pod框架).我还通过XCode撤销并重新颁发了我的所有证书,因为它指出代码签名是一个问题.
编辑:我完全重新安装了OSX并从工作配置克隆了Git的repo.没变.这必须是xcassets-theory之外的东西,因为即使我查看几周前的提交(我知道这确实不是问题)我仍然得到错误.从现在到最后一次工作,Apple可能会更新某些内容.我已经放弃了,现在继续前进.我只需点击左侧浏览器中的视图而不是故事板内部的视图.希望有人在某个地方能够解决这个问题.
该主题的解决方案正在回避我.
我有一张桌子(除了与我的问题无关的其他领域):
NAME,CARDNUMBER,MEMBERTYPE
现在,我想要一个显示cardnumber和membertype相同的行的视图.这两个字段都是整数.名称是VARCHAR.名称不是唯一的,并且重复的卡号,membertype也应该显示相同的名称.
即如果以下是表格:
JOHN | 324 | 2
PETER | 642 | 1
MARK | 324 | 2
DIANNA | 753 | 2
SPIDERMAN | 642 | 1
JAMIE FOXX | 235 | 6
Run Code Online (Sandbox Code Playgroud)
我想要:
JOHN | 324 | 2
MARK | 324 | 2
PETER | 642 | 1
SPIDERMAN | 642 | 1
Run Code Online (Sandbox Code Playgroud)
这可以按卡号排序,使其对人类有用.
这样做最有效的方法是什么?
我一直在努力解决NSURLConnection电话立即失败的问题.需要完全重启设备或需要打开/关闭飞行模式以解决问题.单独重新启动应用程序(向上滑动)无济于事.
一些事实:
- 所有URL均为HTTPS,TLS 1.2与Forward Secrecy兼容.ATS和iOS 9没有问题.自iOS 7以来一直存在错误,并且仍然存在9.2.
应用程序不使用第三方框架.我只使用NSURLConnection始终有效的本机调用,除非出现这种奇怪的情况.
- 没有基础设施/网络问题 - 同一网络上的其他设备(例如,相同的WiFi)同时在同一个应用程序中工作.来往/来自3G/Wifi没有任何区别.
- 我总是执行willCacheResponse返回nil.
- 该服务托管在AWS Elastic Beanstalk上,因此一些人建议在IP地址更改时可能是DNS缓存问题 - 这对我来说似乎不太可能并且应该在不同的设备上同时触发多个错误,这是我从未见过的.
- didFailWithError即时调用的方法就好像设备上根本没有互联网连接 - 但是所有其他应用程序都可以工作.
- 可以随时浏览承载应用程序使用的API的网站.该网站实际上提出了获取数据的相同请求.
返回的错误代码是-1003 , kCFURLErrorCannotFindHost. 我一直在关注Git处理相同问题的线程无济于事.https://github.com/AFNetworking/AFNetworking/issues/967
我尝试使用NSURLRequestReloadIgnoringCacheData我的所有请求,但这没有帮助.
有了这些信息,是否有人会冒险猜测我可能做错了什么?我添加了赏金,因为我不知道如何处理这个问题 - 特别是因为它是如此不一致.它肯定不是一个合法的错误(也就是说,找不到域),因为服务运行正常,而这种情况发生在随机客户端上.
我用一个看起来像这样的静态方法创建我的请求.它被剥夺了一些非公开信息,但基本上它只是用JSON数据执行POST请求.[Controller getSQLHost]只返回一个URL - 基本域.
+(NSURLConnection*)initiatePOSTwithJSONDictionary:(NSDictionary*)dictionary toURL:(NSString*)urllocation withDelegate:delegate {
NSMutableDictionary *connectionDictionary = [[NSMutableDictionary alloc] init];
if (dictionary) {
[connectionDictionary setObject:dictionary forKey:@"input"];
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:connectionDictionary options:kNilOptions error:nil];
NSURL *url …Run Code Online (Sandbox Code Playgroud) 我偶然发现了一个奇怪的错误/问题.
我有一个MySQL表,其中一列填充了数字(BIGINT).这些数字对于常规的32位整数来说太大了,因此PHP会将它们转换为32位的字符串.这样每次都能得到正确的结果.
当在64位PHP上运行并且没有强制转换为字符串时$variable = (string)$variable,结果有时会减1,这样1293203059233之类的数字就会变成1293203059232.这显然不是很好.奇怪的是我看不到任何模式.
它不是随机发生的,因为MySQL中的一行有时会递减,有时也不会递减,但是这样整数/行总是递减,并且总是递减1.
什么可能导致这个?我json_encode用来转换stdClass对象或arrays()文本,然后通过常规的HTTP响应发送它们.
mysqli使用预准备语句检索行,例如:
$stmt = $sql->prepare->("SELECT BIGNUMBER FROM table WHERE SOMEID = ?");
$stmt->bind_result($bignumber);
$stmt->bind_param("i",$someid);
$stmt->execute();
$stmt->fetch();
$stmt->close();
$obj = new stdClass();
$obj->number = $bignumber;
echo json_encode($obj);
Run Code Online (Sandbox Code Playgroud)
我已经验证浏览数据库表时所有整数都是正确的.
一些例子(这些是实际值):
没有转换为字符串:
10205160559939609 -> 10205160669939608 // bad
Run Code Online (Sandbox Code Playgroud)
有:
10205160559939609 -> "10205160559939609" // good
Run Code Online (Sandbox Code Playgroud)
没有转换为字符串:
10154493437278508 -> 10154493437278508 // good (?)
Run Code Online (Sandbox Code Playgroud)
有:
10154493437278508 -> "10154493437278508" // good
Run Code Online (Sandbox Code Playgroud)
编辑:我做了一个error_log测试pre-json_encode来测试,产生:
as Strng: (used error_log((string)$number);)
10205160559939609
as int: (used error_log($number);) …Run Code Online (Sandbox Code Playgroud)