sql >> データベース >  >> RDS >> Mysql

mysql+列ヘッダーにスペースを含むファイルのインポート+処理方法

    MySQL LOAD DATAステートメントは、ファイルから位置ごとに値をロードします。 、名前ではありません。

    MySQLには、(。csvファイルのヘッダー行からの)フィールドの「名前」について、列名と「一致する」という要件はありません。 (システムの他のコンポーネントにそのタイプの要件がある可能性がありますが、MySQL LOAD DATAにはありません。)

    .csvファイルにヘッダー行がないことは有効です。ヘッダー行がある場合、通常はIGNORE 1 LINESを使用して「スキップ」します。 。

    余談ですが、私はキーワードFIELDSを使用することを好みます COLUMNSの代わりにLOADDATAステートメントで 。

    MySQLでは、識別子(列名、テーブル名)はバックティック文字を使用してエスケープできます。スペースなどの無効な文字を含む識別子を使用するには、識別子をエスケープする必要があります。

    CREATE TABLE ... 
    ... 
    `Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
    ^             ^
    

    私のキーボードでは、バックティックは左上のキーです `〜 1のすぐ左側! キー。

    ANSI_QUOTES

    sql_modeの場合 変数にはANSI_QUOTESが含まれます 、次に、二重引用符を使用して識別子をエスケープすることもできます。例:

    SHOW VARIABLES LIKE 'sql_mode' ;
    
    SET sql_mode = 'ANSI_QUOTES,...' ;
    
    SHOW VARIABLES LIKE 'sql_mode'
    
    Variable_name  Value        
    -------------  -----------
    sql_mode       ANSI_QUOTES  
    

    次に:

    CREATE TABLE ... 
    ... 
    "Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
    ^             ^
    

    sql_modeの場合 しない ANSI_QUOTESを含める (明示的に、または他の設定に含まれている場合)、識別子の前後の二重引用符は機能しません。また、識別子を一重引用符で囲むことはできません...一重引用符で文字列リテラルを囲みます。

    要点:バックティック文字を使用して識別子(列名、テーブル名など)をエスケープし、文字列リテラルを一重引用符で囲みます。 ANSI_QUOTESが設定されている場合でもSQLコードを機能させるために、文字列リテラルを二重引用符で囲むことは避けてください。




    1. 大量のテキストまたはHTMLを保存するためにどの列データ型を使用する必要がありますか

    2. 新しいテーブルを作成するときに外部キーを追加するにはどうすればよいですか?

    3. 週番号を使用してMySqlで週の最初の日を取得する

    4. SQL Server 2008での一括削除(データを削除するための一括コピー(bcp)のようなものはありますか?)