簡體   English   中英

MySQL:相同的值不相同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM