mysql上用load file导入了一个csv文件到一张表,导入后,查看,发现一行不正常,如下:
+-----------------+-------------+------------------+
| org | length(org) | char_length(org) |
+-----------------+-------------+------------------+
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
| 000000000001 | 15 | 13 | ------------这里多了一个字符,三个字节,我的字符集是utf8的,不知道多了个什么字符。下面分析。
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
| 000000000001 | 12 | 12 |
+-----------------+-------------+------------------+
查看文件,并没有发现第一行有空格,因为是从windows上上传来的,我怀疑有不可见字符在捣乱。
下面利用vi的16进制分析文件,发现如下:
0000000: efbb bf30 3030 3030 3030 3030 3030 3109 ...000000000001.
0000010: 3109 3336 3232 3031 3139 3932 3031 3034 1.36220119920104
0000020: 3032 3132 0949 094a 09e9 9988 e5bd a6e5 0212.I.J........
0000030: 8588 094d 0931 3939 322d 3031 2d30 3409 ...M.1992-01-04.
发现问题了,多了efbb bf这3个字节,这是windows上utf8编码的BOM,去掉就可以正常load了。
去掉的方法:
最简单的:在windowns打开,用edit或notepad都行,另存为utf8格式无BOM格式。
当然linux也有去掉的方法,不过比较不好记忆命令,win上的最简单了。