[英]MySQL: Identical Values Not Identical
我在這里閱讀了類似的問題,但是我不確定如何使它適用於MySQL。
我有一個要插入的數字文件,用於保存記錄。 我正在讀取文件,連接到數據庫,並使用PHP查詢數據庫。 該部門的一切工作正常,這是我的代碼:
$dbh = new PDO("mysql:host=$hostname; dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
print "Connected to Database\n\n\n";
$file = "missing.txt";
$fileArray = preg_split("/[\t\r]/", file_get_contents($file));
for ($i = 0; $i < count($fileArray); $i++) {
if ($i == 0 || $i % 7 == 0) {
$sql = $dbh->prepare("INSERT INTO temp_missing SET SKU = ?;");
$sql->bindParam(1, $fileArray[$i]);
$sql->execute();
echo $fileArray[$i] . "</br>";
}
}
現在看來,發送到MySQL的數據很好。 第1行包含一個值03999。我知道該值存在於另一個表中,因此我將鍵入一個select命令以根據此新表中存在的這些編號從一個表中獲取特定信息。
SELECT num, name, description FROM table1 WHERE num IN (SELECT SKU FROM temp_missing);
這不會返回任何東西。 沒事 如果我輸入以下內容:
SELECT * FROM temp_missing WHERE SKU = 03999;
SELECT * FROM table1 WHERE num = 03999;
SELECT * FROM table1 WHERE num = '03999';
他們都返回了一些東西。 它們都返回num或SKU為03999的行。但是以下內容什么也不返回:
SELECT * FROM temp_missing WHERE SKU = '03999';
那什么也沒返回,而且我似乎無法在互聯網上找到任何東西(或者至少我無法正確表達我的問題)以弄清楚為什么它們不相同以及如何使其相同。
以下是這兩個字段的設置方式:
表格1
num-> VARCHAR->長度/設置:20->不允許無符號,不允許空值,不填零,默認保留為空白,保留為空白
temp_missing
SKU-> VARCHAR->長度/設置:50->不允許無符號,不允許空值,不填零,默認值,留空后的所有內容
我剛剛注意到的兩者之間有一個很大的區別(我沒有創建這兩個表,我已經被以前的程序員所接受)。
num是一個鍵。 SKU無關緊要。
這有什么區別嗎?
請讓我知道這是否有意義,是否需要更多信息,以及是否碰巧有一個我找不到的問題-相信我,我已經嘗試了數月以不同的解決方法,這次我找不到一個-致歉。
謝謝。
作為附錄,我正在從中讀取的文件-missing.txt-是作為文本標簽創建的,該標簽與excel文件分隔,該excel文件的格式為具有完全文本格式的行和列。 以防萬一。
不匹配的原因是您的正則表達式測試\\r
,而不測試\\n
。 由於您的文件可能具有\\r\\n
表示換行符的序列,因此您最終會得到以\\n
開頭的字符串。 如果您的行在制表符分隔符旁邊也有空格,那么這些行也會出現在您的數據中。
為了解決這個問題,請將您的正則表達式更改為:
/\s*[\t\n]\s*/
無需明確提及\\r
,因為它將被\\s
覆蓋。 仍然需要明確提及\\t
和\\n
,否則您還會被單個字段中出現的空格分開。
另外,您還可以使用以下映射在分割后刪除值周圍的空白:
$fileArray = array_map('trim', $fileArray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.