0

今日、私はばかげたことをしました: DB テーブルに何らかの方法でインポートしなければならなかった Excel ファイルにカード番号のリストがありました。だから私は数字をCSVファイルにエクスポートしましたが、引用符はありません(理由は聞かないでください)。ファイルは次のようになりました。

123456
234567
345678
...

VARCHAR(22)次に、単一の列を持つテーブルを作成し、

LOAD DATA LOCAL INFILE 'numbers.csv' INTO TABLE cards

これは、私が無視した多くの警告を除いて、うまくいきました(私がした他の愚かなこと)。その後、このSQLでクエリを実行しようとしました:

SELECT * FROM cards WHERE number='123456'

空の結果が得られました。これは機能しますが:

SELECT * FROM cards WHERE number=123456

引用符の欠落に注意してください。それで、VARCHARテーブルにINTEGERデータを入力することができたようです。それがどのように可能かはまったくわかりません。

UPDATE私はすでにこのようなものでこれを修正しようとしました

UPDATE cards SET number = CAST(number AS CHAR(22))

しかし、それはうまくいきませんでした。

これを修正する方法はありますか?

4

1 に答える 1

2

これは、数値比較を行うための暗黙的な変換の結果です。

SELECT * FROM cards WHERE number='123'

"123"これは、文字通りであり、見逃してしまう" 123"テキストフィールドに対してのみ一致し、"123\r"それらがある場合にのみ一致します。何らかの理由で、おそらく「同等」"123 ""123"見なされ、両側の末尾のスペースが削除されます。

インポートを行うときは、忘れないでくださいLINES TERMINATED BY '\r\n'。隠し文字を含め、フィールドの内容について混乱したことがある場合は、次のことを試してください。

SELECT HEX(number) FROM cards

これにより、各文字列の 16 進ダンプ出力が表示されます。のようなものは、URL が20スペースであるように、スペースを示します。%20

これは、次の方法でも修正できます。

UPDATE cards SET number=REPLACE(number, '\r', '')
于 2013-07-30T16:31:57.103 に答える