sql >> Database >  >> RDS >> Mysql

mysql + een bestand importeren met spaties in de kolomkoppen + hoe te handelen

De MySQL LOAD DATA-instructie laadt waarden uit het bestand per positie , niet bij naam.

MySQL stelt geen eisen aan de "namen" van de velden (van de kopregel in het .csv-bestand) die "overeenkomen" met kolomnamen. (Het is mogelijk dat een ander onderdeel van uw systeem dat soort vereisten heeft, maar MySQL LOAD DATA niet.)

Het is geldig dat een .csv-bestand geen kopregel heeft. Als er een kopregel is, "slaan we deze over" met IGNORE 1 LINES .

Terzijde, ik gebruik liever het trefwoord FIELDS in de LOAD DATA-instructie in plaats van COLUMNS .

In MySQL kunnen identifiers (kolomnamen, tabelnamen) worden ontsnapt met behulp van backtick-tekens. Om een ​​identifier te gebruiken die ongeldige karakters bevat, zoals een spatie, moet de identifier een escapeteken hebben.

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

Op mijn toetsenbord is de backtick de toets linksboven ` ~ net links van de 1 ! sleutel.

ANSI_QUOTES

Als sql_mode variabele bevat ANSI_QUOTES , dan kunt u ook dubbele aanhalingstekens gebruiken om id's te ontwijken. bijv.

SHOW VARIABLES LIKE 'sql_mode' ;

SET sql_mode = 'ANSI_QUOTES,...' ;

SHOW VARIABLES LIKE 'sql_mode'

Variable_name  Value        
-------------  -----------
sql_mode       ANSI_QUOTES  

Dan:

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

Als sql_mode doet niet inclusief ANSI_QUOTES (expliciet of opgenomen in een andere instelling), dan werken de dubbele aanhalingstekens rond identiferen niet. En het gebruik van enkele aanhalingstekens rond identifiers zou nooit moeten werken... enkele aanhalingstekens omsluiten letterlijke tekenreeksen.

De afhaalmaaltijd:gebruik backtick-tekens om te ontsnappen aan identifiers (kolomnamen, tabelnamen, enz.) en gebruik enkele aanhalingstekens rond letterlijke tekenreeksen. Vermijd het gebruik van dubbele aanhalingstekens rond letterlijke tekenreeksen, om uw SQL-code te laten werken, zelfs wanneer ANSI_QUOTES is ingesteld.




  1. MYSQL invoegen waar niet bestaat met PDO

  2. Hoe kunnen indexen worden gecontroleerd of ze bestaan ​​in een Laravel-migratie?

  3. Bevoegdheden toekennen aan verschillende tabellen met een specifiek voorvoegsel

  4. Kan geen verbinding maken met MySQL op localhost:3306 met gebruiker root