Улучшение ответа Obalix. Я создал bash-скрипт, который возьмет файл UTF-8 CSV и вставит его в базу данных.
Обратите внимание, что файл, предоставленный Obalix, находится в UTF-16, а не в UTF-8. Приведенный ниже скрипт проверяет его кодировку и советует пользователю, как его преобразовать.
Конечно, вам нужно изменить оператор вставки в соответствии с вашей схемой.
#!/bin/bash
USAGE="Usage: $0 <csv-file>"
if [ $# -lt 1 ]
then
echo $USAGE
exit 1
fi
csv=$1
if [ ! -f $csv ]; then
echo "$csv: No such file"
exit 1
fi
file $csv | grep -q UTF-8
if [ $? -ne 0 ]
then
echo $csv: must be in UTF-8 format, use the following command to fix this:
echo "cat $csv | iconv -f UTF-16 -t UTF-8 | tr -d \"\r\" > utf8-$csv"
exit 1
fi
mysql=<PATH/TO/mysql/BINARY>
db=<DATABASE_NAME>
user=<USERNAME>
pass=<PASSWORD>
sql=insert-all-langs.sql
echo "-- Inserting all languages generated on `date`" > $sql
printf "Processing CSV file..."
# prepend _ to all lines so that no line starts by whitespace
sed 's/.*/_&/' $csv | while read l; do
iso6391=`echo "$l" | cut -f4`
name=`echo -e "$l" | cut -f3 | tr -d "\"" | sed 's/'\''/\\\\'\''/g'`
echo $iso6391:$name
# insert ignore supresses errors for duplicate locales (row still not inserted)
echo "insert ignore into languages (name, locale, rtl, created_at, updated_at) values ('$name', '$iso6391', 0, now(), now());" >> $sql
done
echo Done
printf "Executing SQL..."
cat $sql | $mysql -u$user -p$pass $db
echo Done