我将数据从本地文件上传到我服务器中MySQL的数据库。
所以我使用以下命令:
mysql -u dude --password --local-infile
use rest_db;
LOAD DATA LOCAL INFILE '/root/scripts/asistencia.txt' INTO TABLE asistencia FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
所以我得到了:
Query OK, 765 rows affected, 15 warnings (0.01 sec)
Records: 765 Deleted: 0 Skipped: 0 Warnings: 15
警告是:
+-------+------+----------------------------------------------+
| Level | Code | Message |
+-------+------+----------------------------------------------+
| Note | 1265 | Data truncated for column 'nombre' at row 76 |
但是当我从我当地的PHPMYADMIN检查记录时,我发现这些字段没有显示“ñ”字符而是我得到“”“字符。
我尝试将此字段(VARCHAR)设置为“utf8_spanish2_ci”或“utf8_spanish2_ci”或“latin1_spanish_ci”,但行为是相同的。
任何我缺少的暗示?
顺便说一句,记录是:“AVENDAñO”,但我进入DB“AVENDAñO”
谢谢。
答案 0 :(得分:0)
我认为如果您更新表(来自PHP),如下所示,问题将解决:
Update table_name
set col_name=replace(col_name,'ñ','ñ')
在导入时也可以这样做:
LOAD DATA LOCAL INFILE '/root/scripts/asistencia.txt' INTO TABLE asistencia FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' set col_name=replace(col_name,'ñ','ñ');
答案 1 :(得分:0)
Mysql有一个default collation of latin1_swedish_ci。要设置新的排序规则,您需要发出ALTER DATABASE foo DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE 'utf8_general_ci'
命令,但这不会更新预先存在的条目。所以,我dump a flatfile,使用mysql < dumpfile.sql
编辑它并reload it。 mysqldump命令生成一个文本文件,可以在例如vim中编辑,没有任何问题。
希望这会有所帮助。如果您还有其他问题,请发表评论。
答案 2 :(得分:0)
我不相信截断的警告是由特殊字符引起的。我认为你得到的是因为你导入的列的长度太短而不适合这15条记录。您可能只需要增加列的长度。
在处理不同的字符集时,这些类型的编码问题会变得复杂。在这些情况下,只需更改排序规则就无法解决问题,您需要将CHARSET
更改为@ hd1。只有在更改CHARSET
之后,您才应该担心整理。
为了安全起见,请在更改之前导出数据库/表。
我会先将表格转换为utf8
,因为它现在已成为标准。
ALTER TABLE tbl_name
CONVERT TO CHARACTER SET utf8
通过执行此操作,它还会将表和列的CHARSET
更改为utf8,但您可能仍需要手动将列的排序规则更改为utf8_general_ci
(默认值)。如果utf8_general_ci
不包含特定字符,您可以使用utf8_spanish_ci
如果您想更改默认字符集(对于新列)...
ALTER TABLE tbl_name
DEFAULT CHARACTER SET utf8
以下是一些有用的文档:
10.1 Character Set Support
10.1.12 Column Character Set Conversion
10.1.13.1 Unicode Character Sets