我在MYSQL(innoDB表)中有一个奇怪的错误。
我是下表:(用户) 姓氏(varchar)| name(varchar)| fiscalCode(char 16)| toUpdate(bool - int 1)| type(enum SSN | STP)|状态(A = alive | D =死)| lastUpdate(datetime)
此处查询选择:
Public Function SHA256Hash(ByVal s As String) As String
Dim hashFunction As SHA256 = SHA256Managed.Create
Dim bytes() As Byte = (New ASCIIEncoding).GetBytes(s)
Dim hash() As Byte = hashFunction.ComputeHash(bytes)
Return GetStringFromHash(hash)
End Function
Private _HardwareID As String
Public Function HardwareID() As String
If String.IsNullOrWhiteSpace(_HardwareID) Then
_HardwareID = SHA256Hash(String.Format("CPU>>{0}|BASE>>{1}|USER>>{2}", cpuID, baseID, userID))
End If
Return _HardwareID
End Function
Private Function identifier(ByVal wmiClass As String, ByVal wmiProperty As String)
Dim result As String = String.Empty
Dim mc As New Management.ManagementClass(wmiClass)
Dim moc As Management.ManagementObjectCollection = mc.GetInstances()
For Each mo As Management.ManagementObject In moc
'Only get the first one
If String.IsNullOrWhiteSpace(result) Then
Try
result = mo(wmiProperty).ToString
Catch ex As Exception
End Try
End If
Next
Return result
End Function
Private Function cpuID() As String
'Uses first CPU identifier available in order of preference
'Don't get all identifiers, as it is very time consuming
Dim retVal As String = identifier("Win32_Processor", "UniqueID")
If String.IsNullOrWhiteSpace(retVal) Then 'If no UniqueID, use ProcessorID
retVal = identifier("Win32_Processor", "ProcessorId")
If String.IsNullOrWhiteSpace(retVal) Then 'If no ProcessorId, use Name
retVal = identifier("Win32_Processor", "Name")
If String.IsNullOrWhiteSpace(retVal) Then 'If no Name, use Manufacturer
retVal = identifier("Win32_Processor", "Manufacturer")
End If
End If
End If
Return retVal
End Function
Private Function baseID() As String
Return String.Concat(identifier("Win32_BaseBoard", "Model"), _
identifier("Win32_BaseBoard", "Manufacturer"), _
identifier("Win32_BaseBoard", "Name"), _
identifier("Win32_BaseBoard", "SerialNumber"))
End Function
Private Function userID() As String
Return System.DirectoryServices.AccountManagement.UserPrincipal.Current.Guid.Value.ToString
End Function
这样做,我得到100个财务代码,但是如果我验证它们,有人有SELECT fiscalCode FROM users
WHERE type = 'SSN' AND toUpdate = 1 AND status = 'A'
ORDER BY lastUpdate ASC LIMIT 100
而某人有toUpdate = 0
有日期,而在DB中有很多lastUpdate
所以使用lastUpdate = '0000-00-00 00:00:00'
我希望这是第一次
如果我使用ORDER BY lastUpdate ASC
作为字段来转换查询,那么:
*
我得到了正确的结果。所有SELECT * FROM users
WHERE type = 'SSN' AND toUpdate = 1 AND status = 'A'
ORDER BY lastUpdate ASC LIMIT 100
都包含fiscalCode
,toUpdate = 1
,status A
和type SSN
。
为什么呢?这是Mysql的错误吗?