用ñ字符截断的mysql数据

时间:2014-12-30 23:51:44

标签: mysql

我将数据从本地文件上传到我服务器中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”

谢谢。

3 个答案:

答案 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